mysql - Oracle、MySQL 等 RDBMS 中的数据压缩

标签 mysql database oracle in-memory-database compression

我正在阅读有关内存数据库的内容,它包含数据压缩等功能。使用它,它不是存储列中的名字、姓氏、父亲的名字等值(这会导致大量数据重复和磁盘存储空间的浪费),而是为每列创建一个字典和属性向量表,这样字典中只存储唯一值,而其对应的属性向量则存储在原始表中。
这种方法的明显优点是通过消除数据重复的开销来节省大量空间。

我想知道:

  1. 像 Oracle、MySQL 等 RDBMS 在将数据存储在磁盘上时是否隐式遵循这种方法?或者,当我们使用这些 RDBMS 时,如果我们想利用相同的优势,就必须实现相同的功能?
  2. 众所周知,天下没有免费的午餐,所以我想了解如果开发人员实现上述数据压缩方法,会有哪些权衡?我能想到的是,为了从数据库中获取数据,我必须在字典表和主表之间建立连接。不是吗?

请分享您的想法和意见。

最佳答案

这个答案是基于我对您的查询的理解。您似乎混淆了两个概念:数据标准化数据存储优化

数据标准化:这是一个需要由应用程序开发人员执行的过程。这里,需要重复存储的数据片段仅存储一次,并使用它们的标识符(通常是整数)来引用。这样,数据库仅消耗存储重复数据一次所需的空间。这是将字符串和可变长度数据存储到数据库表中时的常见做法。为了检索数据,应用程序必须在相关表之间执行联接。此过程会直接影响应用程序性能,具体取决于相关表的设计方式。

数据存储优化:这是由 RDBMS 本身处理的。这涉及到各种步骤,例如维护 B 树结构来保存数据、在存储之前压缩数据、管理数据文件中的可用空间等。不同的 RDBMS 系统会以不同的方式处理它们(其中一些是专利和专有的,而另一些则是更多)一般的);然而,当我们谈论像 Oracle 和 MySQL 这样的 RDBMS 时,您可以放心,它们将遵循一流的存储算法来有效地存储这些数据。

希望这有帮助。

关于mysql - Oracle、MySQL 等 RDBMS 中的数据压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30821732/

相关文章:

php - Sql 请求到 2 个表以获取每行的百分比

database - 如何为数据库调用编写单元测试

SQL 连接问题

sql - Oracle Pro*C 用游标更新表失败

mysql - 计算一个表中某一列中多行的值到另一个表中

PHP:针对数据库表的 Textarea 输入验证

java - 缓存发生错误时进行回滚操作以保持与数据库同步

android - 恢复后刷新 SQLite 数据库引用

ORACLE 数字转字符串

php - 导航栏中的引导多级下拉菜单有不需要的空白空间