用于可搜索性的键值数据库建模

Key Value Database Modeling for searchability

假设我正在建立一个像 eBay(或其他东西)这样的市场,

数据看起来像这样 (pseudo-code):

public class Item {
    Double price;
    String geoHash;
    Long startAvailabilty; // timestamp
    Long endAvailabilty; // timestamp
    Set<Keywords> keywords;
    String category;
    String dateCreated; // iso date
    String dateUpdated; // iso date
    Integer likes;
    Boolean isActive;
}

假设我想构建一个“查询”来过滤项目:

项目与字段数据(标题、价格、时间戳范围)以及一些文本(描述)一起存储。然后我需要根据以下内容进行过滤:

我想根据以下结果排序:

在 Key-Value 数据库中应该如何 modeled/stored 才能使用上面给定的查询检索它? 那是不使用任何模式(无模式)

当您的访问模式需要以多种不同方式获取相同信息(例如按标签获取、按日期获取、按类别获取等)时,您将与 DynamoDB 打一场硬仗。通过巧妙的数据建模,您可以可以支持访问模式。然而,作为一个 key/value 商店,搜索并不是 DynamoDB 的最佳选择。

解决您的问题的一种常见方法是使用专门搜索的工具,例如ElasticSearch. You can still store your data in DynamoDB, but use ElasticSearch to support your search needs. AWS even has an article on this topic,它描述了如何使用 DynamoDB 流来保持 ElasticSearch索引是最新的。

虽然可以单独在 DynamoDB 中支持此访问模式列表,但这会很痛苦(而且可能很昂贵)。我建议寻找专为搜索而构建的解决方案。