【问题标题】:Problems associated with having 50 million rows in database与数据库中有 5000 万行相关的问题
【发布时间】:2015-03-27 19:25:01
【问题描述】:

我正在考虑购买包含 5000 万条记录的位置数据集。拥有这么多条目的数据库时,我将面临哪些问题?我计划在 heroku 上使用 Postgres。使用 lat lng 运行附近位置等查询时会遇到问题吗?我怎样才能让这些查询运行得非常快?在 heroku 上与此相关的一些成本是什么?

【问题讨论】:

  • 模糊到无用的地步。什么访问模式和什么索引?什么样的并发?你花了多少钱?
  • 大小无关紧要,重要的是你用它做什么。而且 5000 万条记录也不算多,如果我们的数据库只有 5000 万条记录,我会担心!

标签: database postgresql heroku


【解决方案1】:

问题有多种形式。在这一点上,这是一个相当广泛的问题。 首先,您需要很好地定义您的应用程序将支持的访问模式。您将需要在 where 子句中使用的字段上构建索引以支持这些情况。如果没有索引,并发查询,即使只有几十个,也会让你的机器崩溃。

对于 PostGIS 中的地理空间查询,您还需要使用每条记录的 lat lon val 在该数据上创建空间索引,以构建点几何来填充几何字段。具有空间索引的几何字段将使空间查询非常快。

另一种有助于提高访问速度的方法是使用表分区,并将每个表的数据文件放在单独的挂载点上,其中分区基于某个位置(如 geohash 前缀范围或其他内容)。这是非常高级的东西,除非你有很多 dba/geo 经验,否则你需要大量阅读才能实现它。

无论如何,如果您期望非常高的并发性,您将需要一个非常强大的盒子。 或者,如果您的用例本质上是只读的,您可以使用 Apache SOLR Cloud 或 ElasticSearch 之类的东西来支持您的查询,包括点几何查询、BBox 和多边形查询。 ElasticSearch 是集群的,因此它将有助于通过分片等方式分发查询。SOLR Cloud 将做同样的事情(基本上)。我现在针对具有 7.5 亿条记录的 10 节点 ElasticSearch 集群进行开发,每条记录都是一个地理点加上一堆其他字段。如果您的用例不是同时具有高并发和繁重写入负载的用例,那么这些是重型替代方案可能不是必需的。此外,如果您需要使用所有 postGis 分析函数,即 st_* 函数,那么您可能仍需要坚持使用 PostGIS。

我对heroku一无所知

HTH

【讨论】:

  • 如果没有数字而不是“非常高”或“非常快”等术语,我不确定这是否特别正确。公平地说,提问者没有提供任何有用的信息
  • @RichardHuxton 除非我们真正了解每条记录的外观以及每个查询一般返回多少等,否则偶数是没有意义的……我的回答与问题处于同一抽象级别.我实际上认为对于那些只是想弄清楚从哪里开始的人来说,这不是一个糟糕的答案
  • @markg no 这个答案太棒了,正是我想要的!我不能分享太多关于我们将使用的确切查询的信息,但现在这是我需要的......只是在这样做时需要考虑不同的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 2014-01-17
  • 2012-12-08
  • 1970-01-01
  • 2020-03-01
  • 2010-09-14
  • 1970-01-01
相关资源
最近更新 更多