5

在我的 Rails 应用程序中,我想将位置列字段的地理范围存储在数据库中。例如,纽约的边界被表示为一个多边形:一个数组数组。

我已经声明我的模型来序列化多边形,但我不确定我是否应该像这样存储它们。这些序列化多边形的大小很容易超过 100,000 个字符,而 MySQL 只能在标准 TEXT 字段中存储大约65000 个字符。

现在我知道 MySQL 也有一个 LONGTEXT 字段。但我真的希望我的应用程序与数据库无关。Rails 如何自己处理这个问题?它会自动切换到 LONGTEXT 字段吗?我什么时候开始使用 PostgreSQL?

4

4 回答 4

3

在这一点上,我建议你问问自己——这些数据需要存储,还是应该以这种格式存储在数据库中?

我提出了两种可能的解决方案:

  1. 将多边形存储在文件系统中,并从数据库中引用它们。如此大的数据项在数据库中几乎没有用——将它们作为文本进行查询实际上是没有意义的。文件系统擅长存储文件 - 使用它。

  2. 如果您确实需要数据库中的这些多边形,请将它们存储为规范化数据有一个称为多边形的表和另一个称为点的表,反序列化多边形并以反映数据库预期使用方式的方式存储它。

希望这是有帮助的。

于 2013-02-06T16:25:15.400 回答
2

Postgresql 有一个名为 PostGIS 的库,我的公司使用它来处理在这种情况下可能非常有用的几何位置和计算。我相信 postgresql 也有两种允许数组和散列的数据类型。例如,声明数组,例如text[]可以将文本替换为另一种数据类型。可以使用 hstore 模块定义散列。

于 2013-02-06T16:14:07.853 回答
2

这个问题回答了我的部分问题:Rails 设置了 65535 的默认字节限制,您可以手动更改它。

总而言之,之后是否会遇到麻烦取决于您使用的数据库。对于 MySQL,Rails 会自动切换到适当的 *TEXT 字段。MySQL 最多可以存储1GB的文本。

但是就像 benzado 和 thomasfedb 说的那样,最好将信息存储在一个文件中,这样数据库就不会分配很多甚至可能不会使用的内存。

于 2013-02-06T16:28:20.500 回答
1

即使您可以将此类内容存储在数据库中,您也应该考虑将其存储在外部,只需将 URL 或其他标识符放入数据库中即可。

如果它在数据库中,那么当您不打算使用它时,您最终可能会将 64K 的数据加载到内存中,因为您访问了该表中的某些内容。与数据库表相比,扩展只读文件集合(使用 Amazon S3 之类的东西)更容易。

于 2013-02-06T16:22:38.787 回答