在我的Rails应用程序中,我想将位置列字段的地理边界存储在数据库中。例如,纽约的边界表示为多边形:数组数组。
我已声明我的模型序列化多边形,但我不确定是否应该像这样存储它们。这些序列化多边形的大小很容易超过100,000个字符,MySQL只能在标准TEXT字段中存储大约65000 characters。
现在我知道MySQL也有一个LONGTEXT字段。但我真的希望我的应用程序与数据库无关。 Rails如何自己处理这个问题?它会自动切换到LONGTEXT字段吗?我什么时候开始使用PostgreSQL?
答案 0 :(得分:3)
此时我建议你问问自己 - 这些数据是否需要存储,或者应该以这种格式存储在数据库中?
我提出了两种可能的解决方案:
将多边形存储在文件系统中,并从数据库中引用它们。这样的大型数据项在数据库中几乎没有用 - 将它们作为文本进行查询实际上毫无意义。文件系统擅长存储文件 - 使用它。
如果您确实需要数据库中的这些多边形,请将它们存储为规范化数据。有一个名为polygon的表,另一个名为point,反序列化多边形并以反映数据库使用方式的方式存储它。
希望这有帮助。
答案 1 :(得分:2)
Postgresql有一个名为PostGIS的库,我公司用它来处理在这种情况下可能非常有用的几何位置和计算。我相信postgresql还有两种允许数组和哈希的数据类型。例如,声明数组,如text[]
,其中text可以替换为另一种数据类型。可以使用hstore模块定义散列。
答案 2 :(得分:2)
This question回答了我的部分问题:Rails设置了65535的默认字节限制,您可以手动更改它。
总而言之,在此之后是否会遇到麻烦取决于您正在使用的数据库。对于MySQL,Rails将自动切换到相应的* TEXT字段。 MySQL可以存储to 1GB个文本。
但是像benzado和thomasfedb所说,最好将信息存储在一个文件中,这样数据库就不会分配大量甚至可能无法使用的内存。
答案 3 :(得分:1)
即使你可以在数据库中存储这种东西,你应该考虑在外部存储它,只需在数据库中放入一个URL或其他标识符。
如果它在数据库中,当你不打算使用它时,最终可能会将64K数据加载到内存中,只是因为你访问了该表中的某些内容。而且,比数据库表更容易扩展只读文件的集合(使用类似Amazon S3的东西)。