2016-09-23 97 views
0

我正在試驗DocumentDB作爲新應用程序的可能數據存儲。該應用程序必須處理大量數據,因此我使用數據遷移工具將大量文檔放入集合中。DocumentDB存儲過程延續

我的應用程序中的大部分查詢都將進行彙總和求和。所以我使用documentdb-lumenize。該code sample調用從C#是存儲過程我做這樣的事情:

var configString = @"{ 
     cubeConfig: { 
      groupBy: 'year', 
      field: 'Amount', 
      f: 'sum' 
     }, 
     filterQuery: 'SELECT * FROM TestLargeData t' 
    }"; 

var config = JsonConvert.DeserializeObject<object>(configString); 
var result = await _client.ExecuteStoredProcedureAsync<dynamic>("my/sproc/link", config); 

結果我回來是這樣的:

{ 
    "cubeConfig": { 
    "groupBy": "year", 
    "field": "Amount", 
    "f": "sum" 
    }, 
    "filterQuery": "SELECT * FROM TestLargeData t", 
    "continuation": "-RID:rOtjAPc4TgBxFwAAAAAAAA==#RT:6#TRC:6000", 
    "stillQueueing": false, 
    "savedCube": { 
    "config": { 
     "groupBy": "year", 
     "field": "Amount", 
     "f": "sum" 
    }, 
    "cellsAsCSVStyleArray": [ 
     [ 
     "year", 
     "_count", 
     "Amount_sum" 
     ], 
     [ 
     2006, 
     4825, 
     1391399555.74 
     ], 
     [ 
     2007, 
     1175, 
     693886378 
     ] 
    ], 
    "summaryMetrics": {} 
    }, 
    "example": { 
    "year": 2007, 
    "SomeOtherField1": "SomeOtherValue1", 
    "SomeOtherField2": "SomeOtherValue2", 
    "Amount": 12000, 
    "id": "0ee80b66-7fa7-40c1-9124-292c01059562", 
    "_rid": "...", 
    "_self": "...", 
    "_etag": "\"...\"", 
    "_attachments": "attachments/", 
    "_ts": ... 
    } 
} 

的_count值表明,我回到6000個文檔的價值的彙總數據。有一百萬份文檔(我想測試大!)

我在結果中看到「continuation」值。但StoredProcedureResponse沒有像DocumentQuery類那樣的ExecuteNextAsync方法。我如何使用DocumentDB API來請求下一部分數據?

回答

2

我是documentdb-lumenize的作者。如果您只發回返回的唯一參數,那麼documentdb-lumenize sproc將知道如何處理連續令牌。你將不得不一直調用它,直到延續標記回來爲止。

這就是說,我真的很驚訝,它只有一次往返6000次。每次往返旅行通常會得到20-50K。也許你有一個較低spec'd集合?也許它正在進行無索引全掃描?

如果您希望獲得更多1:1幫助,請在GitHub倉庫中提交問題。

+0

謝謝拉里。通過「返回什麼返回」你的意思是採取我得到的整個「結果」JSON和替換「configString」? –

+1

是的,整個結果。如果這變得很大,我有一個版本將狀態存儲在文檔中,並且只是來回傳遞一個令牌。你仍然需要調用它,但有效載荷大大減少。讓我知道你是否想要這個版本。 –

+0

我會試一試並跟進。非常感謝您的幫助! –