我们正在尝试使用Aerospike实施日志记录或统计数据。我们有用户登录,Anonymus用户向我们的主数据库发出查询,我们希望存储它所做的每一个请求。
到目前为止,我们最好的方法是使用UserID作为键存储记录,将查询关键字存储为List,如下所示:
{
Key: 'alacret'
Bins:{
searches: [
"something to search 1",
"something to search 2",
"something to search 3",
...
]
}
}
作为应用程序架构师,回顾一下,我遇到了几个性能/设计缺陷:
1)检索和存储是两个操作,获取所有列表,追加,然后再次放置似乎效率低下或次优 2)通过两次操作意味着我必须在交易中做两件事,以防止加速条件,我认为这会杀死Aerospike的表现 3)文档说明列表是大小有限数据的数据结构,所以如果我理解正确,不能很好地扩展,特别是对于会以指数方式增加列表大小的匿名用户。
作为替代方案,我建议将userID作为Bin移动,并生成一个防止加注条件的Key,并将保存操作保持为单个操作,而不是事务中的几个。
所以,我正在寻找的是意见和验证。
问候
答案 0 :(得分:2)
您可以附加到列表或前置。您也可以通过修剪它来限制它,如果超出一定的限制,您不必关心存储搜索项目,即您只想在您的用户ID搜索列表中存储100个最新项目。您可以执行追加和修剪,然后在一个锁中读回更新的列表。如果要存储在磁盘上,则记录大小限制为1MB,包括所有开销等。如果仅将数据存储在RAM中,则可以存储更大的记录大小。 (存储引擎内存)。这是否适合您的应用需求?