【问题标题】:What data type can I use for very large text fields that is database agnostic?对于与数据库无关的非常大的文本字段,我可以使用什么数据类型?
【发布时间】:2013-02-06 16:09:01
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为与 TEXT 有相同的限制,Rails 序列化为字符串(使用 YAML)。

标签: ruby-on-rails database ruby-on-rails-3 text storage


【解决方案1】:

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

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

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

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

希望对您有所帮助。

【讨论】:

  • #2 是一个有趣的想法,尽管除非经常修改多边形,否则它是一种更复杂的方法。
【解决方案2】:

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

【讨论】:

  • 来自 OP:“我真的希望我的应用程序与数据库无关”
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多