我正在尝试用Elasticsearch取代Solr设置。 这是一个新的设置,还没有看到生产,所以我有很多空间摆弄东西,让他们工作得很好。 我有非常非常大量的数据。 我将一些实时数据编入索引并保存7天(使用_ttl字段)。 我不在索引中存储任何数据(并禁用_source字段)。 我预计我的指数将稳定在200亿左右。 我将把这些数据放入2-3个命名索引中。 到目前为止search性能高达几十亿行是完全可以接受的,但是索引性能是一个问题。 我对ES如何在内部使用分片有点困惑。 我创build了两个ES节点,每个节点都有一个单独的数据目录,每个目录有8个索引和1个副本。 当我查看群集状态时,我只能看到每个节点有一个分片和一个副本。 不是每个节点都保持多个内部运行的索引吗? (检查磁盘上的存储位置显示肯定只有一个Lucene索引存在)。 – 解决了,因为我的索引设置没有从configuration中正确拾取。 现在使用API创build索引并指定碎片和副本的数量,现在已经完全产生了我期望看到的结果。 另外,我尝试运行相同ES节点的多个副本(来自相同的configuration),并且它确认已经有一个副本运行并创build了自己的工作区域。 这些新的节点实例似乎也只有一个磁盘索引。 – 现在每个节点实际上使用多个索引,具有多个索引的单个节点已经足够扼杀整个系统,所以这不是问题。 何时启动额外的Elasticsearch节点,以获得最大的索引性能? 我是否应该有多个节点,每个节点运行1个索引1个副本,或者更less的节点有大量的索引? 有没有我的configuration丢失,为了让单个节点做更多的工作? 另外:是否有任何度量值知道什么时候只有HTTP的节点过载? 现在我有一个节点专门用于HTTP,但除了CPU使用率,我不知道它是否行得通。 什么时候启动额外的HTTP节点,并将索引软件拆分为指向不同的节点?
最近我一直在阅读可扩展架构。 在这种情况下,继续显示数据库的两个词是分片和分区 。 我searchsearch引擎,维基百科和计算器的描述,但仍然结束了困惑。 可以在stackoverflow的专家帮助我获得基本的权利? 分片和分区有什么区别? 是不是真的“所有分片数据库本质上是分区的(通过不同的节点),但是所有的分区数据库不一定是分片的 ?
我们有一个大约70GB的InnoDB数据库,我们预计在未来的2到3年内它会增长到几百GB。 大约60%的数据属于一个表格。 目前数据库运行良好,因为我们有一个64 GB RAM的服务器,所以几乎整个数据库都适合内存,但是当数据量会大得多时,我们担心未来。 现在我们正在考虑某种方式来分割表格(特别是那些占据最大部分数据的表格),现在我想知道,最好的办法是什么。 我目前知道的选项是 使用版本5.1附带的MySQL分区 使用某种封装数据分区的第三方库(如hibernate shards) 在我们的应用程序中实现它自己 我们的应用程序基于J2EE和EJB 2.1(希望有一天我们可以切换到EJB 3)。 你会build议什么? 编辑(2011-02-11): 只是更新:目前数据库的大小是380 GB,我们的“大”表的数据大小是220 GB,其索引的大小是36 GB。 所以当整个表格不再适合记忆的时候,索引就是这样。 系统仍然运行良好(仍然在同一个硬件上),我们仍然在考虑对数据进行分区。 编辑(2014-06-04):多一个更新:整个数据库的大小是1.5TB,我们的“大”表的大小是1.1TB。 我们将服务器升级到具有128 GB RAM的4处理器机器(Intel Xeon E7450)。 系统仍然运行良好。 接下来我们要做的是把我们的大桌子放在一个单独的数据库服务器上(我们已经对软件进行了必要的修改),同时升级到具有256GB RAM的新硬件。 这种设置应该持续两年。 然后,我们要么终于开始实施分片解决scheme,要么只购买带有1TB内存的服务器,这将使我们保持一段时间。 编辑(2016-01-18): 我们已经把自己的数据库放在一个单独的服务器上。 目前该数据库的大小约为1.9TB,其他数据库的大小(除“大”之外的所有表)为1.1TB。 当前硬件设置: 惠普ProLiant DL 580 4个Intel(R)Xeon(R)CPU E7-4830 256 GB RAM 这个设置的性能很好。
我们最近为我们的一个主要collections品创下了超过200万的唱片,现在我们开始为这个collections品的主要性能问题而苦恼。 他们在集合中的文件有大约8个字段,您可以通过使用UI进行过滤,结果应该按时间戳字段对logging进行分类。 我已经添加了几个复合索引与过滤的字段和时间戳例如: db.events.ensureIndex({somefield: 1, timestamp:-1}) 我还添加了几个索引,一次使用几个filter,希望取得更好的性能。 但有些filter仍然需要很长的时间来执行。 我已经确保使用解释查询确实使用我创build的索引,但性能仍然不够好。 我想知道分片是否是现在的走向..但是我们很快就会开始在这个集合中每天有大约一百万个新logging..所以我不确定它是否能够很好地扩展。 编辑:查询的例子: > db.audit.find({'userAgent.deviceType': 'MOBILE', 'user.userName': {$in: ['nickey@acme.com']}}).sort({timestamp: -1}).limit(25).explain() { "cursor" : "BtreeCursor user.userName_1_timestamp_-1", "isMultiKey" : false, "n" : 0, "nscannedObjects" : 30060, "nscanned" : 30060, "nscannedObjectsAllPlans" : 120241, "nscannedAllPlans" : 120241, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 1, "nChunkSkips" : 0, "millis" : […]
我有一个ES节点有4个节点: number_of_replicas: 1 search01 – master: false, data: false search02 – master: true, data: true search03 – master: false, data: true search04 – master: false, data: true 我不得不重新启动search03,当它回来,它重新join群集没有问题,但剩下7个未分配的碎片铺设。 { "cluster_name" : "tweedle", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 4, "number_of_data_nodes" : 3, "active_primary_shards" : 15, "active_shards" : 23, "relocating_shards" : 0, "initializing_shards" : […]
分割MySQL表的最佳方法是什么? 我能想到的方法是: 应用程序级别分片? 在MySQL代理层分片? 中央查找服务器分片? 你知道这个领域有什么有趣的项目或工具吗?