2014-07-07 16 views
4

如何在執行AQL select時包含PK?AQL - 如何在SELECT中顯示PK

例子:

SELECT * FROM test.users

返回:

名字,姓氏等

我真正想知道的是PK還是關鍵,所以我可以刪除行。我如何將PK包含在SELECT AQL語句中。

回答

7

默認情況下,Aerospike不會將實際主鍵存儲在數據庫中。它默認存儲20字節的摘要(密鑰的散列)。這將是大型密鑰的巨大節約。但是,在最新版本中,這可以通過put()操作來更改,以存儲密鑰。但是,AQL客戶端還沒有增強,但仍然利用這個事實。我將爲此增強提交內部票據。

在平均時間...

  1. 選項1:你可以把你的數據備份也將轉儲base64編碼格式的摘要(關鍵的哈希值)。您可以使用這些摘要來刪除記錄。
  2. 選項-2:如果您使用C/Java或任何API編寫掃描代碼,您也將獲得摘要列表。您可以使用它們刪除記錄。
+0

如何使用Java API編寫PK?我目前正在調用「client.put(null,key,binsArray);」 (客戶端類型爲com.aerospike.client.AerospikeClient,鍵值爲com.aerospike.client.Key,binsArray爲 com.aerospike.client.Bin [])。我只是將另一個bin添加到binsArray中作爲密鑰?如果是這樣,我該用什麼名字命名? 「PK」? – Brent212

+0

我想通了。有點。我將寫策略「sendKey」屬性設置爲true,現在我可以在AQL shell中看到PK列。但是我仍然無法做一個「select * from 」,其中PK =''「。總是得到「未找到記錄」結果。 – Brent212

+0

是的,在寫策略中設置sendKey屬性是正確的。看起來你正在使用錯誤的查詢。它應該是「select * from 其中PK =''」。你可能已經想通了 – sunil

1

替代解決方案

產生額外斌保存主鍵和索引它。然後你可以使用AQL語句檢索這個主鍵。

+0

如何使用aql創建bin? –

+0

@SureshParmar當您保存具有額外的bin和相關數據的數據時,它會自動創建它。 –

+0

感謝您的信息...我需要更多的幫助。我想用aerospike去,但我不確定在某些point.I有多個列有地圖和列表數據類型。我的要求是將數據存儲在地圖中並從地圖中檢索數據。第二件事是檢索數據時,我需要檢查where子句中的多個bin。那麼它對我來說會很方便嗎?請儘快回覆。並感謝好友。 :) –

2

刪除集合中的數據 - 要從集合中刪除記錄,可以使用scanAll API遍歷所有記錄並刪除。在scanCallback調用期間,它獲取每個記錄的摘要密鑰並刪除。下面是引用鏈接

http://www.aerospike.com/community/labs/deleting_sets_and_data.html

一旦我們擴大了通過AQL檢索主索引,然後你可以檢索已創建主索引鍵,但通過調用確保你已經存儲的密鑰的功能sendKey屬性WritePolicy類。 SendKey發送用戶定義的密鑰,除了記錄放置上的散列摘要。默認情況下不會發送。