【问题标题】:Is it possible to use primary key along with secondary key in Aerospike for fetching a record?是否可以在 Aerospike 中使用主键和辅助键来获取记录?
【发布时间】:2020-06-15 04:31:25
【问题描述】:

是否可以使用主键和辅助键。我想根据主键获取所有记录,然后对其应用二级索引?这是正确的方法还是应该使用其他方法?

我有一个带主键的 bin。一旦我使用主键获取记录,我只想获取记录的子集。 下面是记录示例。还有没有更好的方法来组织记录?比如以经理、主管等人员为key,然后查询。

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

【问题讨论】:

    标签: aerospike aerospike-ce aerospike-loader


    【解决方案1】:

    如果能先按主键查询肯定是有好处的。这将非常有效,因为请求将落在单个节点上(与二级索引查询的所有节点相反)。在那个节点上,主键索引查找会很快。

    当您说二级索引时,看起来您的要求是对数据进行额外的过滤。如果我的理解是正确的,您可以使用Map API 来获取您明确查找的键(或值)。为此,您可能需要相应地调整数据模型。在您的示例中,如果您要获取不同的薪水,则可能应该创建薪水地图(而不是“薪水”作为地图中的键)。像这样的:

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

    然后,您可以使用 getByKeyList() 地图 API 通过指定您感兴趣的键(在地图中)(例如“经理”和“其他员工”)来获取多个值。

    【讨论】:

    • 在 aerospike 集合中添加 1 个 bin 或更新 aerospike 中的记录后,还有什么方法可以进行内存分析。比较以前的记录和新的记录
    • 没有。您无法比较旧记录与新记录的内存。但是 Aerospike 统计数据会在统计数据中给出总内存消耗。
    【解决方案2】:

    对包含主要搜索数据的 bin 使用二级索引查询,然后使用谓词过滤器进一步选择返回的记录。 示例构造 - 记录在命名空间测试中具有国家和城市箱,设置测试集,二级索引 = 国家/地区的相等字符串。

    // 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)
    );
    

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多