我有一个需要搜索的MySQL / Rails应用程序。以下是有关数据的一些信息:
用户只能在自己的数据中进行搜索,因此搜索范围会缩小到user_id开始。
每位用户最多会有五千条记录(随着时间的推移会累积)。
我将典型用户的记录写入文本文件。文件大小为2.9 MB。
搜索必须涵盖两列:title
和body
。 title
是varchar(255)列。 body
是列类型文字。
这将被轻易使用。如果我平均每秒进行几次搜索就会出人意料。
它正在运行一台500 MB的CentOS 5 VPS机器。
我不想要相关性排名或任何形式的模糊性。搜索应该是精确的字符串,并可靠地返回包含字符串的所有记录。简单的日期顺序 - 从最新到最旧。
我正在使用InnoDB表格类型。
我正在寻找普通的SQL搜索(通过searchlogic gem)或使用Sphinx和Thinking Sphinx gem进行全文搜索。
Sphinx非常快,思维Sphinx很酷,但它增加了复杂性,维护守护进程,cron作业维持索引。
我是否可以通过纯SQL搜索获得小规模的应用程序?
答案 0 :(得分:3)
我认为普通的SQL搜索不是一个好选择。因为当我们在MySQL中获取文本类型列时,无论缓存设置是什么,请求总是落到硬盘驱动器上。
您只能在非常小的应用程序中使用纯SQL搜索。
我更喜欢Sphinx。
答案 1 :(得分:1)
我会从简单开始 - 很有可能普通的SQL会运行良好,如果搜索功能被证明是瓶颈,你总是可以在以后切换到全文搜索。
我正在开发和维护一个具有类似于你的属性的搜索功能的应用程序,到目前为止,普通的SQL搜索对我来说非常有用。我在一年或两年前第一次实现搜索功能时遇到了类似的性能问题,但我还没有看到任何性能问题。
答案 2 :(得分:0)
使用MySQL全文搜索大约4年,现在只是转向Sphinx,我会说使用全文布尔(即精确)语法的常规MySQL搜索会没问题。它很快,它会完全符合您的要求。您将在任何时间搜索的数据量都很小。
唯一的问题可能是订购结果。当您开始按(例如)日期排序时,MySQL的全文搜索会变慢,因为这需要您搜索整个表,而不是仅搜索它找到的第一个 nn 结果。这最终是我搬到狮身人面像的原因。
狮身人面像也很棒,所以不要害怕尝试它,但听起来好像你的情况下可能不需要额外的功能。