Windows Azure 용으로 개발 된 ASP.NET 응용 프로그램이 있습니다. 응용 프로그램이 매우 쓰기 쉽기 때문에 DB에 대해 샤딩을 사용하여 쓰기 시간을 향상시켜야하지만 데이터를 쉽게 분리해야한다는 생각이 들었습니다. 그러나 모든 인스턴스에서 몇 가지 중앙 변수를 추적해야하며 해당 정보를 저장할 최적의 위치가 확실하지 않습니다. 내 옵션은 무엇입니까?샤르드 환경에서 중앙 집중식 값을 관리하는 방법
요구 사항 :
- 는, 내구성이해야 인스턴스가
- 가 동기화되어야합니다 재부팅 살아남을 수 있습니다. 이러한 경우 업데이트를 충돌 시키거나 적어도 예외를 던지려면 값을 덮어 쓰거나 자동으로 실패하는 것이 중요합니다.
- 는 2000 + 읽기/I 단순히/메모리의 값을 기록 읽고 모든 너무 디스크에 플러시 작업자 역할을 실행하는 별도의 구성 요소를 작성하는 생각 두 번째
당 쓰기 (합리적으로 빠른이어야합니다 자주하지만, 그 목적을 위해 이미 Windows Azure에서 사용할 수있는 용도로 작성된 것이 있어야한다고 생각합니다.
내가 찾고있는 것은 Apache ZooKeeper와 같은 시스템이지만 생각하고 싶지는 않습니다. 작업자 역할을 시작할 때 JRE를 설치하고 모든 재즈를 다루십시오.
Ed 이 : 아래의 제안, 나는 다음과 같은 코드를 사용하여 푸른 표 스토리지를 사용하기 위해 노력하고있어 기준 자료 : 그러나
var context = table.ServiceClient.GetTableServiceContext();
var item = context.CreateQuery<OfferDataItemTableEntity>(table.Name)
.Where(x => x.PartitionKey == Name).FirstOrDefault();
if (item == null)
{
item = new OfferDataItemTableEntity(Name);
context.AddObject(table.Name, item);
}
if (item.Allocated < Quantity)
{
allocated = ++item.Allocated;
context.UpdateObject(item);
context.SaveChanges();
return true;
}
을의 context.UpdateObject(item)
호출 The context is not currently tracking the entity.
가 추가 처음 항목에 대한 컨텍스트를 쿼리하지 않습니다 실패 컨텍스트 추적 메커니즘?
내 요구 사항은 엔티티가 이전 값이 예상 값과 일치 할 경우에만 업데이트 할 수 있도록하는 것입니다 (낙관적 잠금, 즉 '엔티티 업데이트 = 엔티티 = 값'. 테이블 스토리지로 수행 할 수 있습니까? 내가 할 수있는 웹 주위에 힌트를 보았지만 구체적인 예는 없습니다 ... – Chris
예, ETag를 사용할 수 있습니다. 새 SDK를 사용하면 매우 쉽게 만들 수 있습니다. –
내가 제안한대로 할려고하는데, 하지만 오류가 발생했습니다. 위의 편집을 참조하십시오. – Chris