2015-10-13 54 views
0

我們正在使用DynamoDB,並具有一些複雜的查詢,這些查詢將使用代碼輕鬆處理,而不是嘗試編寫複雜的DynamoDB掃描操作。編寫一個掃描操作還是隻使用查詢操作(對散列鍵或二級索引進行查詢)拉取最小量的數據並進一步過濾並減少調用代碼本身更好?這是否被認爲是不好的做法或NoSQL可以做的事情?可以使用代碼而不是NoSQL數據庫進行篩選嗎?

回答

1

不幸的是,這取決於。

如果你有一個非常大的表格,表格掃描是不實際的。

如果您有複雜的查詢需求,那麼使用DynamoDB解決此問題的最佳方法是使用全局二級索引(Global Secondary Indexes,GSI)充當所需字段上的投影。您可以使用諸如稀疏索引(僅在對象的子集上存在的字段上創建GSI)和複合屬性鍵(連接兩個或更多個屬性並將其用作創建GSI的新屬性)等技術。

但是,要直接解決問題「是否可以使用代碼而不是NoSQL數據庫進行篩選?」答案是肯定的,那是一個可接受的方法。在DynamoDB中執行過濾器的原因不是爲了減少查詢的「成本」,這實際上是相同的,而是爲了減少網絡上不必要的數據傳輸。

理想的解決方案是使用GSI來縮小返回的範圍,儘可能接近您想要的範圍,但是如果需要進行某些額外的過濾,則可以很好地通過在DynamoDB中過濾或使用您自己的代碼。

相關問題