首页 > 解决方案 > AEROSPIKE 上是否有可用于唯一键的 NO KEY 或自动增量策略?

问题描述

我们正在尝试使用 Aerospike 实现日志记录或统计实现。我们有登录的用户和 Anonymus 用户对我们的主数据库进行查询,我们希望存储它发出的每个请求。

到目前为止,我们最好的方法是使用 UserID 作为 Key 存储 Records,并将查询关键字存储为 List,如下所示:

{
    Key: 'alacret'
    Bins:{
        searches: [
            "something to search 1",
            "something to search 2",
            "something to search 3",
            ...
        ]
    }
}

作为应用程序架构师,回顾这一点,我发现了几个性能/设计缺陷:

1)检索和存储是两个操作,获取所有列表,追加,然后再次放置似乎效率低下或次优 2)通过执行两个操作意味着我必须在事务中同时执行两个操作,以防止引发条件,我认为会杀死 Aerospike 性能 3) 文档指出 List 是大小有界数据的数据结构,所以如果我理解正确的话,它的扩展性不会很好,特别是对于会成倍增加列表大小的匿名用户。

作为替代方案,我建议将 userID 移动为 Bin,并生成一个防止引发条件的 Key,并将保存操作保持为单个操作,而不是事务中的多个操作。

所以,我正在寻找的是意见和验证。

问候

标签: aerospike

解决方案


您可以附加到列表或将其添加到前面。您也可以通过修剪来限制它,如果超过一定限制,您不关心存储搜索项,即您只想在您的用户 ID 搜索列表中存储 100 个最近的项目。您可以进行追加和修剪,然后读回更新的列表,全部合二为一。如果您在磁盘上存储,则记录大小限制为 1MB,包括所有开销等。如果仅将数据存储在 RAM 中,则可以存储更大的记录大小。(存储引擎内存)。这是否适合您的应用程序需要?


推荐阅读