2013-05-14 41 views
1

我有一堆事件,我需要先按位置组织,然后按时间,然后是其余属性(持续时间,成本,说明)的任何组织。问题是,现在有成千上万的事件,因此查询时,我们只需要检索的一小部分,它应该走出来排序的,最好由第三方指数(成本或持续时间)。嵌套排序的最佳数据库管理系统?

最后,使用该数据库的应用程序需要获取数据的超快速,会做上千查询。不幸的是,我们目前被绑定到传统的硬盘上,所以数据需要按顺序存储。它不会经常更新(每天几百次写入,而每天读数百万次)。

我们试过的MySQL,但即使是序号,它需要200毫秒来定位,我们需要数据的一部分,可能是因为我们的硬盘必须做一吨的追求,即使它知道,所有的数据。

我们已经看了的NoSQL解决方案,如键值存储(Redis的,CouchDB的),但Redis的没有做筑巢和CouchDB的不允许“有序集”,因为它在JSON存储。

有什么解决方案可以帮助我们基于两个(或更多)指示进行存储?附加点,如果它有一个很好的Python接口!

回答

2

没有问题,我不能帮太多的更精确的描述,但我已经解决了这样的使用KD树,这是像二叉树,但在K个维度的问题。它们允许真的快K近邻搜索(在我的情况,我可以查询的约10万份文件由纬度,经度和时间< 1毫秒。语料库)他们唯一真正的缺点是,写作对他们来说是烦人 - 为了保持性能,必须经常重新平衡树。如果您想尝试一下,请查看scipy.spatial.cKDTree模块。假设你已经安装了scipy,你将在10分钟内启动并运行。

如果您正在寻找更多的现成的数据库解决方案,我会考虑的PostGIS;它会让你创建2-4维空间索引。这将是比一个滚你自己的KD树方法更可靠和(多写友好的),在性能一点点的费用。

编辑:我假设这里的“位置”你的意思是地理位置(纬度,经度)。如果它是像“加利福尼亚州”这样的离散位置,那么显然这个答案是没有用的。

+0

非常感谢你的回复!对不起,缺乏明确的 - 我们有城市为位置,例如,“芝加哥”,所以空间的东西是真棒,但它不会帮助我们很多。 如何存储多个东西快速查找组织的数据的任何想法?像上面的例子一样,存储按位置排序,然后开始时间,然后花费? – AC360

相关问题