我还是NoSQL数据库的新手,多年来一直在使用RDBMS(Oracle,MySQL)。现在,我们正在考虑将我们的一个数据库迁移到内存中的NoSQL DB,并且我们坚持采用最佳设计方法。NoSQL(Redis)设计建议
我们正在考虑Redis,但是否会与另一个Key-value商店(如RocksBD或LMDB)一起使用,或者最好单独使用它们将基于我从您那里得到的建议。 (您可以通过完全不同的方法来解决我们的问题。
迁移到内存中的NoSQL表包含人口统计信息(例如名字,姓氏,地址,出生日期,出生国家等等约40个不同的人口统计字段)和生物特征数据,如照片,签名和全部10个指纹。
查询将人口统计如检索其中姓名=“琼斯”和姓氏=“安德烈”和出生日期> 1984年9月13日
我们可以很容易地保存在redis的键值存储一切(包括照片运行,签名,指纹和所有人口统计数据),但我们担心它需要大量的RAM,特别是因为DB最终会增长到大约2亿条记录。因此,我们考虑存储一些在redis中频繁搜索的人口统计数据(例如,名字,姓氏,生日等),然后将其余数据存储在键值存储中,如LMDB或RocksDB(因为这当然需要远内存少于redis)。在这个实现中,当有人想要检索firstname = jones和lastname = mark时,它会搜索redis,获取检索到的记录的id,然后从键值存储区(lmdb或rocksDB)中取回这些记录。 我们主要关心的是阅读性能,对于编写很少担心。 我们希望阅读速度非常快。
这是一个很好的设计方法,或有人建议更好的设计方法,将导致更好的性能。请记住,目标是最大限度地减少内存需求并获得非常好的读取性能。
顺便说一句,这是一种很好的方法来存储这种性质的生物识别技术吗?
- 怎么都是这样challanges解决
还要注意的是,虽然我们对查询的人口,做检索的一个子集,我们主要检索整个数据集的。 (即每个匹配的个体我们检索其他人口统计和生物特征)
请阅读[在什么情况下我可以添加“紧急”或其他类似的短语到我的问题,以获得更快的答案?](/ meta.stackoverflow.com/q/326569) - 总结是,这不是解决志愿者问题的理想方式,而且可能对获得答案起反作用。请不要将这添加到您的问题。 – halfer
不知道条件如name ='jhon'&& last ='doe'将在key-value存储中实现,redis是否支持这一点? – ren
是的。 redis支持这种搜索 – SWILL