현재 PartitionKey를 사용하여 데이터를 저장하는 장치를 Azure Table Services로 구분합니다. 필자는이 데이터를 탐색 할 수있는 뷰어를 만들고 싶습니다. 그러나 데이터를 "장치 별"또는 PartitionKey로 볼 수 있도록 구조화 할 수 있으면 좋을 것입니다. 뷰어 앱에는 어떤 장치가 있는지 알 수 없으므로 주어진 테이블에서 별개의 PartionKeys 목록을 얻을 수 있다면 좋을 것입니다. 이것이 가능할까요, 아니면 각 장치에 새로운 행을 삽입 한 다음 메타 데이터 테이블을 쿼리에 사용하는 것으로 강등 될 것입니까?테이블에서 구분 된 PartionKeys를 가져 오는 방법이 있습니까
답변
모든 파티션 키를 검색하는 방법이 없다고 생각합니다. 여기하지만 영리한 해결 방법입니다 : http://blogs.msdn.com/b/avkashchauhan/archive/2011/10/23/retrieving-partition-key-range-in-windows-azure-table-storage.aspx
이 Avkash의 블로그에서 인용하자면 :
더 파고, 내가 파티션 키의 목록을 가져 API에 내장 더있다가 발견, 대신 내가 만들어야 할 것 나 자신을위한 해결책. 그래서 각 파티션에 하나의 더미 행을 넣었습니다. 파티션 키 목록을 얻으려고했는데 그 더미에 대해 항목 만 쿼리하면 찾고 있던 목록이 나에게 넘겨졌습니다.
난 당신이 이미 본 적이 있지만,이 질문에 발생할 수 있습니다 다른 사람에 대한 것이다 확신은,이 테이블 서비스 기능에 대한 최선의 가이드 생각 : 자세한 API 문서에 예제와 링크 http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/.
유감스럽게도 Azure 테이블에는 고유 또는 기타 기능이 없습니다. 메모리에있는 사전과 같은 구조화 된 키 기반 저장소로 간주하십시오. 수행하는 모든 작업은 먼저로드 할 키를 알고 해당 하위 목록을 처리하지 않는 한 모든 항목을 반복하여 하위 항목을 가져와야합니다.
저는 개인적으로 두 번째 푸른 색 테이블을 사용하고 거기에 파티션 키를 (행 키로) 저장합니다. 그런 다음 다른 요소로 그룹화 할 수 있습니다. 또는이 두 번째 테이블에 단일 파티션 키를 사용하기 만하면됩니다.
이렇게하면 최고의 성능과 최소한의 두통을 줄 수 있습니다.
때로는 작업을 완료 할 때 가장 간단한 방법이 가장 좋습니다.
도움이 되었으면
파티션을 저장할 테이블을 하나 만듭니다. 사용하는 테이블 이름으로 테이블을 파티션하고 작성한 각 파티션에 대한 항목을 추가하십시오.
public class PartitionEntry : TableServiceEntity { }
tableServiceContext.AddObject("TablePartitions", new PartitionEntry
{
PartitionKey = "<table name>",
RowKey = "<partition key>",
});
tableServiceContext.BeginSaveChanges(SaveChangesOptions.ContinueOnError, null, null);
는 단지 파티션의 목록을 얻으려면이 테이블을 쿼리합니다. 이것은 나에게 매우 관리하기 쉽습니다.
var tbl = tableServiceContext.CreateQuery<PartitionEntry>("TablePartitions");
return tbl.Where(i => i.PartitionKey == "<table name>")
.Select(i => new { PartitionKey = i.RowKey, });
이 방법을 최적화 할 수 있습니다. 이 병렬로 실행되는 becauwse
이ConcurrentDictionary<string, byte> partitionKeys = new ConcurrentDictionary<string, byte>();
Parallel.ForEach(myTable.ExecuteQuery(new TableQuery()), entity =>
{
partitionKeys.TryAdd(entity.PartitionKey, 0);
});
당신은 큰 테이블이 경우에도 신속 채워야 :
이렇게하면 테이블의 모든 파티션 키의 목록을 얻을 것이다. "ConcurrentSet"이 없으므로 ConcurrentDictionary를 사용해야합니다. 바이트는 단지 자리 표시 자일뿐입니다. 모든 값은 partitionKeys.Keys에 있습니다.내가 함께 전에 유사한 접근을 시도
: (70 백만 행 테이블에 대해 실행 - 약 2 시간) 위뿐만 아니라 당신이 큰 매우 느린 동작으로
TableQuery queryRows = new TableQuery() { SelectColumns = new List<string> { "PartitionKey" } };
...
var tableClientSrc = storageAcctScr.CreateCloudTableClient();
var tablesSrc = tableClientSrc.ListTables();
var tableSrc = tablesSrc.FirstOrDefault(o => o.Name.Equals(nameSrc));
int cntSrc = tableSrc.ExecuteQuery(queryRows).Count();
...
또는 중간하지만, 많은 속성 테이블과
- 1. 조인 된 테이블에서 데이터를 가져 오는 방법
- 2. ClassLoader가로드 한 클래스를 가져 오는 방법이 있습니까?
- 3. DataGridview에서 새로 추가 된 행을 가져 오는 방법이 있습니까?
- 4. 보기에 삽입 된 들여 쓰기를 가져 오는 방법이 있습니까?
- 5. cakePHP에서 렌더링 된 뷰 목록을 가져 오는 방법이 있습니까?
- 6. .NET에서 사용할 RegEx.Replace에서 사용 된 변수를 가져 오는 방법이 있습니까?
- 7. 방금 제거 된 앱의 이름을 가져 오는 방법이 있습니까?
- 8. 데코레이터가 포장 된 함수를 가져 오는 방법이 있습니까?
- 9. 테이블에서 offsetTop을 가져 오는 중
- 10. iCal 파일을 FullCalendar로 가져 오는 방법이 있습니까?
- 11. 대기열의 마지막 요소를 가져 오는 방법이 있습니까?
- 12. GCC에서 문자열 리터럴을 가져 오는 방법이 있습니까?
- 13. 좋아하는 사람의 이미지를 가져 오는 방법이 있습니까?
- 14. SQLite로 데이터를 가져 오는 쉬운 방법이 있습니까?
- 15. 특정 사용자로부터 메시지를 가져 오는 방법이 있습니까
- 16. HashSet의 현재 용량을 가져 오는 방법이 있습니까?
- 17. div의 스타일 속성을 가져 오는 방법이 있습니까?
- 18. 등록 주소를 가져 오는 방법이 있습니까?
- 19. 스크롤바 높이와 너비를 가져 오는 방법이 있습니까?
- 20. UILabel 텍스트의 shadowPath를 가져 오는 방법이 있습니까?
- 21. iPhone 앱 레코드를 가져 오는 방법이 있습니까
- 22. HTML을 JavaHelp로 가져 오는 방법이 있습니까?
- 23. Open Graph에서 데이터를 가져 오는 방법이 있습니까?
- 24. DOMElement의 모든 속성을 가져 오는 방법이 있습니까?
- 25. 앞에 stage3d를 가져 오는 방법이 있습니까?
- 26. 버즈에서 댓글을 가져 오는 방법이 있습니까?
- 27. 텍스트가없는 UIDatePickerView를 가져 오는 방법이 있습니까?
- 28. $ .ajax의 기본 객체를 가져 오는 방법이 있습니까
- 29. jquery에서 문자열의 일부만 가져 오는 방법이 있습니까?
- 30. 구분 된 문자열이있는 테이블에서 레코드 삽입
이 접근 방식으로 전체 테이블 스캔이 이루어지지 않을까요? 더 나은 접근법은 각 파티션 (장치)에 대해 별도의 테이블을 만들거나 각 장치 (마스터 세부 접근법의 일종)에 대한 정보 만있는 테이블을 만드는 것입니다. –
@ GauravMantri - 예, 전체 테이블 스캔이 발생할 수 있다고 생각합니다. 추가 테이블을 만들고 관리 할 때 오버 헤드를 줄이거 나 스캔을 수행하는 데 더 많은 오버 헤드가 필요한지, 아니면 사용 사례와 데이터 볼륨에 달려 있는지에 대한 질문입니다. 별도의 테이블은 필요 없지만 다른 파티션의 키를 가진 인덱스 파티션도 마찬가지입니다. – JcFx
(현재) 모든 파티션을 반환 할 방법이 없습니다. 전체 테이블을 스캔하여 알아야합니다. 파티션 키를 계산하는 메타 데이터 또는 공통 알고리즘을 사용하십시오. – dunnry