2012-09-09 36 views
0

该网站目前主要进行范围搜索(纬度&经度),并使用了一些筛选条件,如WHERE color = "red"类型的子句。然而,将MySQL与地理空间索引一起使用仍然非常缓慢,我需要加快速度。用于地理空间搜索的MySQL-Solr

问题:使用Solr来做搜索是个好主意吗?

如果是这样,我是否应该只将MySQL中的范围列复制到Solr中,并在MySQL中执行WHERE子句,或者在Solr中执行两种类型的查询?

我读过Solr并不是用来存储数据(比如MySQL)的数据。这是否意味着如果我的搜索可以发生在10个不同的列上(或Solr术语中的field),并且我从Solr's复制的MySQL表格只有11个表格,我仍然会保留MySQL表格,即使这些表格几乎用完了一半的存储空间是多余的两倍?

看来我正在使用结构化数据(因为每行都有多个定义的列?),并将整个表存储在Solr中,而不是在MySQL和Solr上具有冗余数据,这样在写入数据时将节省存储空间和数据库访问操作次数。 Solr是一个很好的选择吗?

就速度而言,使用PostGIS还是Solr会更好?

回答

2

Solr有非常快速的数值/日期范围查询。 Solr 3地理空间利用了这一点,我写了a plugin,甚至更好。我怀疑MySQL更快。这就是说,如果你试图解决的唯一问题是地理空间查询速度慢,那么引入Solr可能会解决它,但是会给系统增加很多复杂性,因为它不能取代关系数据库 - 它与他们一起工作。别误会我的意思; Solr非常棒,尤其适用于分面导航和文本搜索。但是你没有说明你想要利用Solr的主要功能。

PostGIS是迄今为止最成熟的开源GIS存储系统。我建议你试试看它是否更好。我会尝试一种经纬度和列对方法,就像你现在正在使用MySQL做的一样,而且我也会尝试使用PostGIS本地地理空间方式来做到这一点,无论如何。

您可以在MySQL或PostGIS中尝试的一件事是将您的纬度和经度值舍入到小数位数以获得您需要的适当精度级别,这肯定远小于双精度的精度。如果你把它们存放在浮标中而不是双标,那么精确度的上限是2.37米。如果要扫描的独立值较少,那么您使用的系统可能会更容易地进行范围查询。

+0

由于增加了复杂性,你的意思是使用DIH与Solr同步MySQL(它将作为主要数据存储)?在我的情况下,Solr的数据在MySQL后面1分钟仍然可以容忍。 – Nyxynyx

+0

SOLR-2155看起来很甜美,一定会试穿!我需要的是在500k行的表格上进行快速范围搜索(时间戳和经纬度对)。我没有预见到需要全文搜索。至于取整纬度/经度值,我也会在具有这些纬度/经度值的地图上绘制针脚。在存储在Solr中时,将一个好办法整理值,并且在绘制地图上的引脚时使用存储在MySQL中的更准确的值? – Nyxynyx

+0

你可能会使用DIH;是的。在Solr中只有500k行,不要费心使用lat-lon作为优化。 –

相关问题