我试图引导产品,但我受到了限制。所以我希望尽可能降低服务器成本。
我的要求是我需要为elasticsearch中的数百万条记录编制索引,这些记录以每秒20条记录的速度继续进行。我还需要经常运行搜索查询和渗透查询。我目前有一个基本的digitalocean Droplet服务于该网站,该网站也托管了elasticsearch节点。它只有512 MB的RAM。所以我经常遇到堆内存错误,而弹性搜索变得没有响应。
我家里有几台电脑需要备用。 我想要做的是,在我的家庭网络中设置一个主弹性搜索服务器,它将索引所有数据并处理percolate查询。它会定期更新Web服务器上的从属弹性搜索节点。从节点将处理搜索查询。 这种设置可行吗?
如果不可能,那么在当前场景中我需要什么样的最小RAM来保持elasticsearch的快乐?
批量索引(一次100个文档)而不是一次一个文档会有所不同吗?
切换到sphinx会对我的用例产生影响吗?
(我选择弹性搜索而不是sphinx的原因是1.Elasticsearch具有灵活的文档架构,这是一个优势,因为产品仍处于定义阶段.2。Elasticsearch中的渗透功能,我大量使用。)
非常感谢。
答案 0 :(得分:1)
您可以使用Elasticsearch快照和还原机制手动设置类似于主/从的内容:
快照和恢复
快照和恢复模块允许创建快照 单个索引或整个集群到远程存储库中。在 初始发布时只有共享文件系统存储库 支持,但现在正式提供一系列后端 支持的存储库插件。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-snapshots.html
快照和还原让您将索引或整个索引备份到共享文件系统(支持Amazon EC2和Microsoft Azure),然后将其还原。您可以从家中的Elasticsearch集群定期获取索引的快照,然后可以将其还原到云中的搜索集群。您可以通过正常的Rest API来控制它,这样您就可以按计划自动完成它。
这解决了性能问题的索引部分,前提是您的家庭网络上有足够的资源(具有足够内存的服务器和具有足够上载容量的网络,以便将您的索引推送到云端)。
关于查询的性能,您需要尽可能多的内存。就个人而言,我会看一些亚马逊的EC2内存优化实例,这些实例以牺牲磁盘或CPU为代价提供更多内存,因为许多ES安装(如你的)主要受内存限制。
我还建议我在处理堆问题时做了一些事情 - 一个在日志文件中搜索堆问题的简短脚本,当它们发生时会重新启动jetty或tomcat或者你正在使用的任何servlet容器。不是解决方案,但当ES在半夜死亡时肯定有帮助。
答案 1 :(得分:-1)
ElasticSearch非常适合索引数百万条记录,但它需要大量内存才能有效。我们的生产服务器具有 30gig 的内存,仅适用于ES。我没有看到任何方法可以索引数百万条记录,并期望使用512mb的正响应时间。
或许考虑使用Azure或EC2来降低成本。