簡體   English   中英

是否可以在 Aerospike 中使用主鍵和輔助鍵來獲取記錄?

[英]Is it possible to use primary key along with secondary key in Aerospike for fetching a record?

是否可以使用主鍵和輔助鍵。 我想根據主鍵獲取所有記錄,然后對其應用二級索引? 這是正確的方法還是應該使用其他方法?

我有一個帶主鍵的垃圾箱。 一旦我使用主鍵獲取記錄,我只想獲取記錄的子集。 下面是記錄示例。 還有沒有更好的方法來組織記錄? 比如以經理、主管等人員為key,然后查詢。

 {
    "name" : "test",
    "companyName" : "company1",
    "details" : [{
           "salary" : 1000,
           "designation" : "manager"
         },
         {
           "salary" : 2000,
           "designation" : "supervisor"
         },
         {
           "staff" : 500,
           "designation" : "otherStaff"
         }]
} 

在包含主要搜索數據的 bin 上使用二級索引查詢,然后使用謂詞過濾器進一步 select 返回的記錄。 示例構造 - 記錄在命名空間測試中具有國家和城市箱,設置測試集,二級索引 = 國家/地區的相等字符串。

// Java statement
Record record = null;
Statement stmt = new Statement();
stmt.setSetName("testset");
stmt.setNamespace("test");
stmt.setIndexName("country_idx");
stmt.setFilter(Filter.equal("country","USA"));

//Additional Predicate Filtering
stmt.setPredExp(
    PredExp.stringBin("city"),
    PredExp.stringValue(".*Diego"),  
    //prefix-suffix match: prefix.*suffix, ignore case or newline
    PredExp.stringRegex(RegexFlag.ICASE | RegexFlag.NEWLINE)
);

如果您可以先按主鍵查詢,那絕對是有益的。 這將非常有效,因為請求將落在單個節點上(而不是在二級索引查詢的情況下的所有節點)。 在那個節點上,主鍵索引查找會很快。

當您說二級索引時,看起來您的要求是對數據進行額外的過濾。 如果我的理解是正確的,您可以使用Map API來獲取您明確查找的鍵(或值)。 為此,您可能需要相應地調整數據 model。 在您的示例中,如果您要獲取不同的薪水,您可能應該創建薪水的 map(而不是“薪水”作為地圖中的鍵)。 像這樣的東西:

{
    "name" : "test",
    "companyName" : "company1",
    "salaries" : {
           "manager" : 1000,
           "supervisor" : 2000,
           "otherStaff" : 500
    }
}  

然后,您可以使用getByKeyList() map API 通過指定您感興趣的鍵(在地圖中)(例如“經理”和“其他員工”)來獲取多個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM