tablestore設計目标是快速讀寫簡單的表資料,是以對單列大小限制在2m byte(一次寫入超大cell會引起系統波動),對大部分使用者來說,這個值都是足夠的,但是仍然有一些使用者碰到了如下問題:使用者自身絕大部分cell都能保證低于2m,按時有極個别的cell高達20m,此時如果專門為這些大cell使用另外的存儲無疑增加了系統複雜度,于是“如何利用table store存取大cell”就被提了出來。
我們給出的方案如下:
對需要寫入的大cell按照規定大小拆分,比如1m,比如10m的cell會被拆成10個1m的片段,稱為s1,s2…s10
寫入流程如下,針對某一行,逐個寫入s1,s2…s10,每次寫都要攜帶一個狀态列,該狀态列是保證讀寫一緻性的重要手段,較長的描述如下:
讀取流程如下,
我們給出了示例的代碼并測試了32m大cell寫入,整個寫事件耗時26s,讀事件耗時13s。
注意事項:
上面的方案是基于已有的sdk建構的,并不會修改sdk,是以該方案和sdk釋出沒有綁定關系;
如果寫過程中應用程序down,會留下垃圾資料(讀不會成功,因為部分資料校驗會失敗),使用者可以選擇主動清理,或者重新覆寫;
上述功能依賴新版本的限制項放開,近期會更新,緊急需求可以直接論壇發帖。