我需要在一个小型数据库上实现搜索&lt; 500行,我刚刚学习了elasticsearch和lucene。 ElasticSearch占用了大量的RAM。那么我应该怎么做,使用传统的SQL查询或使用lucene或ES。唯一的事情是数据集很小(<500),但我真的想学习ES。有什么建议 ?
注意 - 我正在使用mysql
答案 0 :(得分:1)
首先我认为ES在500条记录中是一个过度杀伤(除非你的每条记录都是100MB大小!),答案仍然存在于其他各种问题中
1)这500条记录经常变化?如果这些记录是静态的或者不经常更改,则应使用简单的Lucene将此数据缓存在应用程序中,并针对缓存数据运行查询。
2)你真的需要自由文本搜索功能吗? (例如模糊匹配,相关性排序等。)如果没有,考虑全表扫描,运行带有500个记录表的MqSQL查询也会非常快。
3)你的期望是什么&#34;搜索&#34;对这些数据的评价?你是在每天1亿次或每天100次对这500条记录进行搜索吗?如果您以极高的速度搜索(每天> 100000次,请不要触发MySQL查询,使用#1中建议的缓存版数据)
还有许多要点被视为 1)SLA期望搜索。 2)如果500个记录经常更新,您的搜索&#34;&#34;客户期望更新后可以搜索数据吗?
只有当你的每条记录都是更大的数据(10s的MB)并且你的数据经常更新时,我才会去ES。
很高兴在此讨论更多内容。
答案 1 :(得分:0)
您应该弄清楚您的文字搜索需求是什么。 MySQL具有有限选项的基本文本搜索。例如,对于当前版本的MySQL,您无法为文本搜索选择ranking function,而Lucene提供了各种各样的文本搜索。
关于RAM问题,它实际上取决于您实现系统和索引的方式。使用Lucene,您可以构建一个内存索引,该索引将使用大量RAM,或者您可以将索引存储在磁盘上,让Lucene负责其余部分。
最后,如果你想学习它,你应该去找它:)