我有 1B 个用户的数据库,每个用户都有多个属性。例如:
{userid : 1, emails : {xx@xx.com, yy@yy.com, zz@zz.com}, countries : {Italy, France, USA}, food : {pasta}}
每个属性可以包含多个值。
在网络应用程序的生命周期中,我想添加更多属性,例如:汽车、颜色......
所以一般来说,我会有 1B 个用户,每个用户都有 3-20 个属性 - 每个用户都有自己的属性子集,在 20 个可能的属性中。
最重要的是:
尽可能快地执行以下查询:使用 email=xx@xx.com OR car=Mercedes OR food=pasta OR color=black OR color=blue OR userid=10 OR userid=20 找到我的所有用户。在每个查询中,我将查询不同的属性子集。
能够很容易地向数据库添加新属性。即在某一天,我还想添加“性别”属性,并且我希望对这个属性的查询会很快。
每个用户只有属性的子集
查询将是“属性=值”。我不需要诸如“property>value”或“property start with value”之类的查询。我将所有值视为常量键。
在很多情况下我会添加新用户,但最重要的是快速查询他们。
应该是持久的、可扩展的、具有故障转移的
如果有关系,我的网络应用程序将用 Java 编写