Database 数据库支持一对多反向查找
我正在寻找一个数据库系统(我想是NoSQL系统)来存储用户ID和别名映射 每个用户ID可能与多个别名关联,我需要能够从两种方式执行快速查找。(即按别名搜索用户ID,按用户ID搜索别名)。每个别名也可能有一些元数据。另外请注意,我们可能有多达数百万的用户ID 考虑到我们拥有的用户ID的数量,我不确定使用RDBMS(如MySQL)是否是一个好主意。尽管MySQL可以完美地满足我的需求,如果不是因为我们拥有的用户数量 这是我到目前为止考虑过的数据库系统Database 数据库支持一对多反向查找,database,one-to-many,key-value-store,nosql,Database,One To Many,Key Value Store,Nosql,我正在寻找一个数据库系统(我想是NoSQL系统)来存储用户ID和别名映射 每个用户ID可能与多个别名关联,我需要能够从两种方式执行快速查找。(即按别名搜索用户ID,按用户ID搜索别名)。每个别名也可能有一些元数据。另外请注意,我们可能有多达数百万的用户ID 考虑到我们拥有的用户ID的数量,我不确定使用RDBMS(如MySQL)是否是一个好主意。尽管MySQL可以完美地满足我的需求,如果不是因为我们拥有的用户数量 这是我到目前为止考虑过的数据库系统 Redis,我们可以将所有用户ID作为集合存储
- Redis,我们可以将所有用户ID作为集合存储到Redis中,使用用户ID作为键,并将用户的所有别名存储在集合中。然后将所有别名存储为哈希,使用别名作为键,用户ID和元数据作为值。
userID1=>[alias1,alias2,alias3] 别名1=>{user:userID1,meta:metadata} 别名2=>{user:userID1,meta:metadata} 别名3=>{user:userID1,meta:metadata}
- HBase设计用于存储数十亿条记录,并且HBase支持随机访问。此外,我们已经在生产Hadoop集群。我们可以使用用户ID作为行键,并为别名和元数据提供一个列族。但HBase并不是真正用于键值对存储的。但如果我们不像Redis那样设置单独的反向查找记录,我们将能够高效地找到与别名关联的用户ID
- Apache Cassandra。从2.1版开始,Cassandra支持索引集合。我想我可以使用用户ID作为主键,将所有别名放在一个集合(例如,集合)中,并为集合编制索引。但后来我读了一篇文章,解释了为什么不建议在高基数列上使用索引。这意味着在集合上创建索引不是一个好主意,因为我们的系统中可能没有两个相同的别名
提前感谢。给定别名的元数据是唯一的还是给定用户ID的元数据是唯一的?