【问题标题】:Which is the best lossless database compression technique哪种是最好的无损数据库压缩技术
【发布时间】:2011-07-14 04:21:09
【问题描述】:

我有一个包含数百万条记录的数据库。

表格有两个属性 1] Name 2] Location

有许多名称不同但位置相同的记录,那么是否有任何压缩技术可以应用于位置属性?

您可以建议各种无损压缩技术及其支持的数据库名称。

【问题讨论】:

  • 为什么要压缩数据?您是否真的有空间问题,或者您只是想过早地优化尺寸?您应该考虑如果成功会发生什么,您将如何查询数据库的位置?无论如何,是否有可能拥有一个位置表,而只存储一个引用?如果有很多位置被重用,大概(但你必须检查)类型 int 的引用总共会占用更少的空间。

标签: database compression


【解决方案1】:

Normalise your database。有一个LOCATIONS 表,并给你的第一个表一个外键。

少于 65,535 个不同的位置?这是原始表中每条记录两个字节。如果你问我,压缩效果很好。也使索引和比较更快。

数据比代码更重要。首先正确获取数据。 默认情况下尽可能标准化。仅在您发现(特定的、可衡量的和完全归因的)性能问题或某些重要原因后才进行非规范化。

【讨论】:

  • 请您编写查询以规范化我的数据库
  • 这不是查询,而是您首先创建数据库的方式。迁移中可能会涉及一些查询,例如“INSERT INTO locations SELECT FROM ...”(我忘记了确切的语法),然后是“UPDATEaddresses SET location_id=(SELECT id FROM locations...”然后删除多余的旧列。
  • @sam:您始终可以在表格中添加 lat/lng 对并使用空间索引。
【解决方案2】:

您想查找空间索引。一个 si 将 2d 复杂度降低到 1d 复杂度。 si 用于热图和树状图中。它看起来像一个四叉树。

【讨论】:

  • 哈哈首先我以为你完全没有抓住重点。然后我意识到我有!是的,如果位置是地址之类的字符串,那么请阅读我的答案——如果位置是纬度/经度之类的,那么您需要离散化您的数据。
  • 对不起,先生,您能否详细说明离散化的含义?你能给我一个离散函数的例子吗?还是空间索引是离散函数?我今天过得很糟糕。
  • 是的。 x 和 y 可能是连续值,但如果你将宇宙分成两半并说“左边是 (x1,y1),右边是 (x2,y2)”,那么你有一个 1 位离散值区分点。其他示例是vector quantization、八叉树寻址等。关系数据库本身不处理此问题,但它们可以将 BSP“路径”存储为普通整数。
  • 谢谢。不错的文章和代码。我已将它添加到我的收藏中。
猜你喜欢
  • 2016-11-28
  • 1970-01-01
  • 2016-12-12
  • 2012-11-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多