2011-08-12 2 views
3

다음 기술 및 언어를 사용하여 MMO 서버를 작성합니다. .Net Framework 4, C#, SQL Server 2008 R2, Entity Data Model, LINQ.MMO 서버 - 사용자 상태 데이터에 대한 데이터베이스 액세스 최적화

내가 가지고있는 질문은 사용자 상태 데이터를 영구 저장 장치 (SQL Server)에 액세스하여 서버 성능을 향상시키는 방법과시기에 관한 것입니다.

이전에는 사용자가 MMO 서버에 로그온했을 때 사용자 연결이 지속되는 동안 빠른 읽기/쓰기 액세스를 위해 RAM에 모든 사용자 데이터를로드 했었습니다. 사용자가 서버에서 로그 오프하면 해당 데이터는 데이터베이스에 보존됩니다.

엔터티 데이터 모델의 출현과 관련된 캐싱의 경우이 메서드가 더 이상 필요합니까? 해야 할 때 Context.SaveChanges(); 이 경우에 전화해야합니까?

모든 안내는 내 질문과 관련하여 평가됩니다. 감사합니다. .

추가 정보 : 저는 .NET 엔터티 모델의 캐싱 기능을 다루는 사람이 없다고 생각합니다. .NET Entity Database 모델이 캐싱을 수행하므로 쿼리가 항상 실제 데이터베이스에 대해 실행되는 것이 아니라 RAM의 데이터에 대해 실행된다는 점을 이해합니다. 내 관점에서 볼 때 RAM 데이터 액세스와 데이터베이스 액세스를 구별 할 필요가 없습니다. 이것은 올바른 가정입니까?

+0

얼마나 많은 사용자가이 데이터베이스에 액세스하려고합니까? 응용 프로그램을 빌드하는 동안 캐싱을 구현하는 방법을 살펴보고 다음 단계에서는 예측을 늘리려면 어떤 쿼리가 실행되는지 살펴 보는 것이 좋습니다. – Jethro

+0

사람들은 왜 코멘트에 질문에 답합니까? –

+2

@ 존 질문이 충분하지 않거나 "대답"이 "시도해야한다"와 같은 경우 사람들은 의견에서 "대답"하는 질문을하지만, 나는 당신의 문제를 돌 보도록 100 % 긍정적이지는 않다 " ,이 경우 주석 *이 올바른 것입니다 *. –

답변

2

저는 전문가는 아니지만 원래 디자인을 고수한다고 말합니다. 컨텍스트를 열어 두려고 더 많은 메모리를 차지하게되고 사용자 연결의 수명주기 동안 모든 변경 사항을 추적하게됩니다. 나는 POCO를 사용하고, 로그인 한 사용자의 객체를로드하고, 컨텍스트를 닫고, 사용자가 로그 오프 할 때 새로운 컨텍스트를 열고, 객체를 다시 첨부 한 다음 변경 사항을 저장하는 것이 좋습니다.

+0

개체의 수명주기 동안 내 자신의 메모리 내 데이터 구조를 사용하기로 결정했습니다. 이것은 나에게 최고의 액세스 속도를 줄 것이다. 나는 그런 다음 영구 저장소 메커니즘에 이러한 시간을 저장한다. –

1

성능이 필요한 경우 memcached가있는 서버 풀을 사용할 수 있습니다.

일단 사용자가 연결되면 캐시에있는 모든 정보를로드하고 데몬에서 주기적으로 데이터베이스로 플러시하고 memcache의 데이터를 업데이트하십시오.

DB보다 RAM의 데이터 성능이 항상 우수합니다.

+0

단일 데이터베이스의 경우. memcached는 읽기/쓰기 캐싱과 관련하여 Entity 모델과 어떻게 다르게 작동합니까? –

관련 문제