aerospike - 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,并将保存操作保持为单个操作,而不是事务中的多个操作。
所以,我正在寻找的是意见和验证。
问候
解决方案
您可以附加到列表或将其添加到前面。您也可以通过修剪来限制它,如果超过一定限制,您不关心存储搜索项,即您只想在您的用户 ID 搜索列表中存储 100 个最近的项目。您可以进行追加和修剪,然后读回更新的列表,全部合二为一。如果您在磁盘上存储,则记录大小限制为 1MB,包括所有开销等。如果仅将数据存储在 RAM 中,则可以存储更大的记录大小。(存储引擎内存)。这是否适合您的应用程序需要?
推荐阅读
- xslt - Solr 7.6 安装什么库和什么版本的 XSLT 以与响应编写器一起使用?
- python - 如何保存 matplotlib 动画的最后一张图片?
- css - 如何将页眉和页脚添加到我从 Mobile Safari 打印的 html 内容的每一页?
- oracle - 如何修复错误以在 Oracle 中分配变量值
- javascript - Chrome 最近打破了使用 innerText 设置的 textarea 中的复制换行符
- python - 更有效的嵌套循环中断方法?
- html - 为什么 flexbox 不像 div 中的其他元素那样居中我的图像?
- ios - 斯威夫特:当有人敲击键盘上的一个键时,有什么方法吗?
- javascript - 从另一个文件访问 SocketIO
- mysql - 选择查询中的 MySQL 存储过程循环增量日期返回最后日期