我正在寻找一个数据库系统(我认为是NoSQL系统)来存储用户ID和别名映射。
每个用户ID可能与多个别名相关联,我需要能够从两种方式快速查找。 (即通过别名搜索用户ID,并按用户ID搜索别名)。每个别名也可能包含一些元数据。另请注意,我们最多可能有数百万用户ID。
考虑到我们拥有的用户ID数量,我不确定使用RDBMS是否是个好主意,例如MySQL。虽然MySQL不能完全符合我的目的,但如果它不适合我们的用户数量。
这是我到目前为止所考虑的数据库系统。
userID1 => [alias1, alias2, alias3]
alias1 => {user:userID1, meta: metadata}
alias2 => {user:userID1, meta: metadata}
alias3 => {user:userID1, meta: metadata}
Redis很快,但它是内存存储。这意味着它的容量受到服务器上可用内存量的限制。如果我们使用此解决方案,我们需要将密钥分成多个Redis实例。
HBase 旨在存储数十亿条记录,HBase支持随机访问。此外,我们已经在生产中拥有一个Hadoop集群。我们可以将用户ID用作行键,并具有别名和元数据的列族。但HBase并不是真正用于时尚存储的键值对。但是,如果我们不设置单独的反向查找记录,我们就无法有效地找到与别名相关联的用户ID,例如在Redis中。
Apache Cassandra 。从2.1版开始,Cassandra支持索引集合。我以为我可以使用用户ID作为主键,并将所有别名放在集合中(例如设置),并为集合编制索引。但后来我读了this文章解释了为什么不建议在高基数列上使用索引。这意味着在集合上创建索引并不是一个好主意,因为我们的系统中可能没有两个相同的别名。
提前致谢。