Database 按细节为过滤器设计和建模的数据和存储 TL;博士

Database 按细节为过滤器设计和建模的数据和存储 TL;博士,database,database-design,data-structures,data-modeling,Database,Database Design,Data Structures,Data Modeling,我有一个架构问题,可以归结为通过预定义的一组公共过滤器过滤实体。输入为:产品集。每种产品都有详细信息。我需要设计过滤引擎,以便(轻松快速)解决任务: “筛选出具有指定详细信息的产品集合” 要求 用户可以指定支持优先级和嵌套筛选器的任何可能的筛选。因此,简单的例子是(weight=X和(color='red'或color='green'))或price我首选的解决方案是拆分实体-您的第二种方法。稳定的数据将保存在Cassandra(或Solr或Elastic等)中,而不稳定的股票数据将保存在(理想

我有一个架构问题,可以归结为通过预定义的一组公共过滤器过滤实体。输入为:产品集。每种产品都有详细信息。我需要设计过滤引擎,以便(轻松快速)解决任务: “筛选出具有指定详细信息的产品集合”

要求
用户可以指定支持优先级和嵌套筛选器的任何可能的筛选。因此,简单的例子是
(weight=X和(color='red'或color='green'))或price我首选的解决方案是拆分实体-您的第二种方法。稳定的数据将保存在Cassandra(或Solr或Elastic等)中,而不稳定的股票数据将保存在(理想情况下)内存数据库中,如Redis或Memcache,支持比较和交换/交易(或Dynamo或Voldemort等,如果股票数据不适合内存)。您不必太担心稳定数据的一致性,因为它可能很少发生变化,所以您可以选择一个可伸缩但不完全一致的数据库,如Cassandra;同时,您可以为波动性股票数据选择一个可伸缩性较差但更一致的数据库。

谢谢,但如果您建议使用index server,请您简要介绍一下,比如比较?当然,我已经读到了最受欢迎的作品,比如索尔/斯芬克斯,但如果能看到其他作品,那就太好了experience@AlmaDo我的大部分经验都是与Cassandra和Elastic合作的——我的理解是Solr类似于Elastic。Elastic非常适合文本搜索,但不推荐将其作为主要数据库(Elastic),但由于您的数据大多是静态的,我怀疑您是否会遇到问题。Cassandra本质上是一个多维键值存储,即一个只有非空列出现在磁盘上的关系数据库-它是“最终一致”的,这意味着它可以扩展到多个服务器节点,但不是每个节点都保证有最新的数据,这对…@AlmaDo…你的工作量应该没有问题,因为它读起来很重。如果您认为这个最终的一致性模型可能是一个问题,那么您可以查询Redis(或其他)数据库以查看产品代码是否存在,如果存在,则使用低一致性读取查询Cassandra,如果此读取失败,则使用高一致性读取查询Cassandra(即,查询每个数据库节点)。
class Value extends Entity implements Arrayable
{
    protected $key;

    protected $value;
    //getters/setters for key/value here
}
class Product extends Entity implements Arrayable
{
    protected $id;

    /**
     * @var Value[]
     */
    protected $details;

    //getters/setters, more properties that are omitted
}