Nosql中按值或条件值搜索记录,拥有1亿条记录
Posted
技术标签:
【中文标题】Nosql中按值或条件值搜索记录,拥有1亿条记录【英文标题】:Search records by value or conditional value in Nosql with 100 millions records 【发布时间】:2018-09-26 11:07:01 【问题描述】:我们正在寻找 NoSQL 数据库,我们可以在其中存储超过 1 亿条记录,其中包含许多字段,例如 Redis 中的集合。
并且数据库应该是可搜索的值。我们检查了 Redis,但它不支持任何按值搜索的选项。因为我们有数百万条记录,我们更新了一些记录字段,然后获取了一堆在特定时间没有更新的记录。
因此,对所有记录运行查询,然后检查哪些记录未从特定时间更新需要更多时间。因为在这个解决方案中,我们每分钟更新 100-200 条记录,然后根据值获取一堆记录。
因此,Redis 将无法在这里工作。我们可以选择存储到 MongoDB,但我们正在寻找支持按值搜索的键值数据库。
"_id" : ObjectId("5ac72e522188c962d024d0cd"),
"itemId" : 11.0,
"url" : "http://www.testurl.com",
"failed" : 0.0,
"proxyProvider" : "Test",
"isLocked" : false,
"syncDurationInMinute" : 60.0,
"lastUpdatedTimeUTC" : "",
"nextUpdateTimeUTC" : "",
"targetCountry" : "US",
"requestContentType" : "JSON",
"group" : "US"
【问题讨论】:
二级索引和谓词过滤器 (aerospike.com/docs/guide/predicate.html) 在 Aerospike 中可用,可能对您的用例有用。 在 Aerospike 中,每条记录都有一个与之关联的上次更新时间元数据,可用于使用谓词过滤器进行搜索 - 与您的用例相关。您还可以使用二级索引根据 bin 中的数字或字符串值进行搜索。 【参考方案1】:在 Aerospike 中,您可以使用 predicate filtering 查找自某个时间点以来未更新的记录,并仅返回该记录的 metadata,其中包括记录摘要(其唯一标识符)。您可以处理匹配的摘要并执行您需要执行的任何更新。这种类型的谓词过滤器非常快,因为它只需要查看保存在内存中的primary index 条目。请参阅 Java 客户端存储库中的 examples。
您不需要在这里使用二级索引,因为您想扫描一个命名空间(或该命名空间集合)中的所有记录,并且只需检查每条记录的“上次更新时间”元数据。由于您将只返回记录的摘要(唯一 ID)而不是任何实际数据,因此此扫描将永远不需要从 SSD 读取任何内容。结果会非常快速和轻量级(同样,只发回元数据)。在客户端中,您将迭代结果集,构建一个 ID 列表,然后对这些 ID 执行后续写入操作。
【讨论】:
以上是关于Nosql中按值或条件值搜索记录,拥有1亿条记录的主要内容,如果未能解决你的问题,请参考以下文章