Monday, January 05, 2015

Amazon DynamoDB - Local Secondary Index (LSI)

在某些情況下, 我們所定義的(Hash/Hash-Range)key並不能滿足所有查詢資料的使用情境,
這時候我們可能會利用Query加上特定的filter,或是利用Scan來找到符合的資料,
但這兩種方法不僅沒有效率(不能保證幾次來回才能拿到所有結果)我們也難以掌握需要消耗多少throughput
我們也可以用額外的table記錄相同的資料但選擇不同的key來滿足各種查詢情境,
但是要維持每個寫入都要完整更新到各個table並不是件容易的事.

為了解決這個問題, DynamoDB提供了Local Secondary Index(LSI), 其實已經推出好一段時間囉XD

[什麼是LSI]
在原本的Hash-Range key之外, 能夠利用原本的Hash key搭配其他的attribute作為新的Hash-Range key來幫助各種可能發生的查詢.
- 選擇的attribute必須是單一值不能是集合
- 此attribute的值不需要是唯一
- 寫入還是針對原本的Hash-Range key, DynamoDB會根據設定更新LSI的資料

[注意事項]
- 一個table最多只能設定五組LSI
- 可以選擇哪些其他的attribute要一起被複製進LSI(原本的Range key一定會被加進去)
- 同一個Hash key底下最多只能掛10GB的資料量, 所以得要在便利性以及資料大小間取得平衡

[對throughput的影響]
- 對LSI的讀寫是消耗整個table的throughput
- 除了10GB的限制會讓我們需要取捨要複製哪些attribute進LSI, 另外要考慮的就是資料越大讀寫時需要的throughput就越大啦
- 如果寫入會影響到LSI的資料, 則會需要消耗額外的throughput:新增,更新(刪除再新增),刪除


ref:
- Local Secondary Indexes

No comments:

Post a Comment