elasticsearch ElasticSearch或Couchbase或其他东西,elasticsearch,couchbase,database,nosql,elasticsearch,Couchbase,Database,Nosql" /> elasticsearch ElasticSearch或Couchbase或其他东西,elasticsearch,couchbase,database,nosql,elasticsearch,Couchbase,Database,Nosql" />

elasticsearch ElasticSearch或Couchbase或其他东西

elasticsearch ElasticSearch或Couchbase或其他东西,elasticsearch,couchbase,database,nosql,elasticsearch,Couchbase,Database,Nosql,背景: 我有一个巨大的数据流-每小时获得1000000条记录,ttl是3小时。。。每个“文档”包含大约20个属性,我需要使用“==”、“IN”和“BETWEEN”比较同时搜索多达15个属性 因为基本上没有不可搜索的属性,所以没有理由将文档存储两次(在Couchbase和ElasticSearch索引中),所以我认为只将其存储在ElasticSearch中是个好主意。我是对的 或者有人可以推荐我更好的数据库来完成这样的任务?我需要一个简单的水平缩放(MySQL的自定义分片不是一个选项)。。。 这些

背景: 我有一个巨大的数据流-每小时获得1000000条记录,ttl是3小时。。。每个“文档”包含大约20个属性,我需要使用“==”、“IN”和“BETWEEN”比较同时搜索多达15个属性

因为基本上没有不可搜索的属性,所以没有理由将文档存储两次(在Couchbase和ElasticSearch索引中),所以我认为只将其存储在ElasticSearch中是个好主意。我是对的

或者有人可以推荐我更好的数据库来完成这样的任务?我需要一个简单的水平缩放(MySQL的自定义分片不是一个选项)。。。 这些数据是某种缓存,因此最终的一致性和较差的持久性是可以的


根据CAP定理,我主要需要A和p…

对于缓存(类似缓存的系统)的用例,我认为Elasticsearch只会在将来给您带来问题。我假设您根本不需要索引,因为您没有看到类似搜索的功能

我没用过Couchbase,但我听说过它的优点。我听说过这样的用例,比如使用Couchbase进行更多的过滤,使用Elasticsearch进行更多的搜索(以及Couchbase不能做的事情)

就可伸缩性而言,就我所知,从非常高的角度来看,两者看起来很相似。两者都支持轻松的分片和复制,并在群集中的节点停机时重新平衡分片和将辅助副本升级到主副本。具体情况可能有所不同

但老实说,你必须自己尝试一下,并用流量之类的产品进行测试。我曾与Elasticsearch合作过,我知道您不能总是说它是否适合您的用例,因为它在生产环境中对应用程序的行为可能与其他应用程序在性能方面的行为有所不同


但我认为您的做法是正确的。

关于性能,如果您使用大小合适的硬件,那么您不应该在每小时索引100万个文档时遇到问题。我已经运行了Elasticsearch并没有任何问题。这里有一篇关于大型Elasticsearch集群的基准测试和规模确定的详细文章,您可能会发现:

对于TTL仅为3小时的短暂缓存系统,我同意将数据存储在多个存储库中是一种浪费。您可以将数据存储在Couchbase中,并实时或近实时地将其复制到Elasticsearch中,但为什么还要费事呢?不确定在这两个地方都有数据会给您带来什么好处

对于与特定用例相关的性能问题,我强烈建议进行基准测试。我发现Elasticsearch(以及Solr)的一个优点是,在多个非文本字段上搜索时,它们(对我来说)的性能惊人地强大。你倾向于认为ES是用于文本搜索的(它确实是excel),但它也是一个不错的通用数据库。我发现,与其他一些NoSQL解决方案相比,它在搜索多个参数时尤其具有强大的性能

就我个人而言,在这个用例中进行基准测试时,我会考虑许多不同的索引选项。ES支持文档的TTL,因此自动清除缓存很容易:

不过,您可能希望在每小时使用不同的索引—ES的一个特点是(由于它使用Lucene底层进行索引和文件存储)删除的工作方式与大多数数据库不同。文档被标记为已删除但未删除,然后定期合并下面的文件(称为段),此时将创建没有删除文档的新段。这可能会导致在单个索引中大量删除高容量用例的磁盘活动。解决方法是为每小时创建一个新索引,然后在索引中的数据超过3小时后删除整个索引

您可能会发现之前关于Elasticsearch中TTL与时间序列索引的讨论非常有用:


最后,关于简单的水平缩放,Elasticsearch在这里非常好-您添加一个具有正确集群名称的新节点,ES负责其余节点,自动将碎片迁移到新节点。在您的用例中,您可能希望使用复制因子,因为跨更多节点的更多副本是提高查询性能的简单方法。

查询是动态更改还是始终使用大致相同的值查询相同的属性?我正在使用的系统是“tour aggregator/search”而数据项实际上是包含以下内容的旅游:出发日期、出发国家、持续时间、度假村、酒店类别、餐饮类型、价格、酒店等。大多数情况下,人们在具体出发日期范围内搜索从具体出发城市到具体国家(或度假村)的最便宜的旅游。哇!很好的解释!