Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库支持一对多反向查找_Database_One To Many_Key Value Store_Nosql - Fatal编程技术网

Database 数据库支持一对多反向查找

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作为集合存储

我正在寻找一个数据库系统(我想是NoSQL系统)来存储用户ID和别名映射

每个用户ID可能与多个别名关联,我需要能够从两种方式执行快速查找。(即按别名搜索用户ID,按用户ID搜索别名)。每个别名也可能有一些元数据。另外请注意,我们可能有多达数百万的用户ID

考虑到我们拥有的用户ID的数量,我不确定使用RDBMS(如MySQL)是否是一个好主意。尽管MySQL可以完美地满足我的需求,如果不是因为我们拥有的用户数量

这是我到目前为止考虑过的数据库系统

  • Redis,我们可以将所有用户ID作为集合存储到Redis中,使用用户ID作为键,并将用户的所有别名存储在集合中。然后将所有别名存储为哈希,使用别名作为键,用户ID和元数据作为值。
    
    userID1=>[alias1,alias2,alias3]
    别名1=>{user:userID1,meta:metadata}
    别名2=>{user:userID1,meta:metadata}
    别名3=>{user:userID1,meta:metadata}
    
Redis速度很快,但它是内存存储。这意味着它的容量受到服务器上可用内存量的限制。如果我们使用这个解决方案,我们将需要将密钥分片到多个Redis实例中

  • HBase设计用于存储数十亿条记录,并且HBase支持随机访问。此外,我们已经在生产Hadoop集群。我们可以使用用户ID作为行键,并为别名和元数据提供一个列族。但HBase并不是真正用于键值对存储的。但如果我们不像Redis那样设置单独的反向查找记录,我们将能够高效地找到与别名关联的用户ID

  • Apache Cassandra。从2.1版开始,Cassandra支持索引集合。我想我可以使用用户ID作为主键,将所有别名放在一个集合(例如,集合)中,并为集合编制索引。但后来我读了一篇文章,解释了为什么不建议在高基数列上使用索引。这意味着在集合上创建索引不是一个好主意,因为我们的系统中可能没有两个相同的别名


提前感谢。

给定别名的元数据是唯一的还是给定用户ID的元数据是唯一的?