Json 当我还想存储密钥的多个实例时,如何在密钥值数据库中构造密钥(如mobile no)?

Json 当我还想存储密钥的多个实例时,如何在密钥值数据库中构造密钥(如mobile no)?,json,nosql,key-value,uniqueidentifier,couchbase,Json,Nosql,Key Value,Uniqueidentifier,Couchbase,我想在NoSQL数据库(如CouchBase)中存储JSON文档,例如{“mobile_no”:“1234567”,“deactivated_date”:“2010/5/5”,“name”:“customer1”},其中手机号作为键 随着时间的推移,手机号码将被停用并与其他客户重复使用,我如何存储同一手机号码的多个实例,同时在密钥中反映1对多是停用的,1始终是网络上实际活动的 在没有问题的关系数据库中,我会像这样存储数据: mobile_no deactivated_date 1234567

我想在NoSQL数据库(如CouchBase)中存储JSON文档,例如{“mobile_no”:“1234567”,“deactivated_date”:“2010/5/5”,“name”:“customer1”},其中手机号作为键

随着时间的推移,手机号码将被停用并与其他客户重复使用,我如何存储同一手机号码的多个实例,同时在密钥中反映1对多是停用的,1始终是网络上实际活动的

在没有问题的关系数据库中,我会像这样存储数据:

mobile_no deactivated_date
1234567   2010/05/05
1234567   2011/12/14
1234567   NULL
在键值数据库中,文档键需要是唯一的,因此我的问题是,如何为上述三个示例构建唯一键,同时仍然能够使用手机号码查询它(例如,您将检查数据库中是否有带有该手机号码的条目,并在找到活动号码时发出错误消息)


是否有可能只搜索一个键的一部分?

在像Couchbase这样的NoSQL数据库中,一种常见的模式是有一个包含当前日期和停用日期的文档,例如:

  • 按键:
    mobile:1234567

  • 价值:


或者您可以为密钥实现类似于版本控制的功能。在这种情况下,当前版本将存储在
“1234567”
键下。让我们想象一下,这个数字被重复使用了两次。在这种情况下,您的存储桶将具有以下键:

"1234567"
{"version": 2, "mobile_no": "1234567", "deactivated_date": null}

"1234567:1"
{"version": 1, "mobile_no": "1234567", "deactivated_date": "2011/12/14"}

"1234567:0"
{"version": 0, "mobile_no": "1234567", "deactivated_date": "2010/05/05"}

因此,每次停用文档时,您都会阅读当前版本,将此版本添加到密钥中,并复制其中的所有内容。之后,您可以增加版本并将新文档存储到默认键(无后缀)

一些键值数据库(如Redis)允许您在一个键下保存一个列表或多个值集。我认为您的解决方案比Dave的解决方案有优势。当不同的用户选择手机号码时,我必须在手机号码键下存储他们不同的用户配置文件。使用版本控制可以轻松地为一个用户选择完整的配置文件信息,包括其活动期间,然后检查事务是否属于该期间。如果没有,我会检查下一个版本,看看事务是否在该时间段内,以将其发送给正确的用户。但是,在不知道每个JSON有多少个版本的情况下,我如何查询这些不同的版本呢?
"1234567"
{"version": 2, "mobile_no": "1234567", "deactivated_date": null}

"1234567:1"
{"version": 1, "mobile_no": "1234567", "deactivated_date": "2011/12/14"}

"1234567:0"
{"version": 0, "mobile_no": "1234567", "deactivated_date": "2010/05/05"}