【问题标题】:How to create column-based DBs given data row by row efficiently如何有效地逐行创建基于列的数据库
【发布时间】:2017-08-23 15:50:27
【问题描述】:

我假设在基于列的数据库中,每一列都存储为一个单独的文件,或者连续存储在一个文件中。如果输入的数据还是像传统的行式数据库那样是一行数据,那如何高效地创建列式数据库呢?

将每一列存储在文件中可能会“简单地”解决问题... 如果有 N 列,则有 N 个文件。当有新的数据行到达时,数据库需要将新数据追加到每个文件中。但是会不会因为不同文件之间的切换而将数据写入不同的文件有开销呢?也许最后一次写入附近的块仍在缓存中。但是如果有很多列(> 1M),我不确定缓存是否可以容纳所有列。另外我猜磁头也需要在不同的文件中寻找...

如果我们在同一个文件中保存多个列,我们可以减少文件句柄的数量,但是在文件中插入新的列数据是昂贵的。也许可以为文件中的每一列保留一个保留空间。但最终空间都被使用了。到时候我们要不要新建一个预留空间更大的文件,把数据复制到里面,...?

是否有任何论文或项目解释了如何有效地从数据行创建基于列的数据库。

【问题讨论】:

    标签: database algorithm data-analysis


    【解决方案1】:

    这是每个人都面临的情况。

    您在某些领域深入挖掘并了解您想要解决的一些问题。即使您对每个问题都有直观的解决方案,您也无法解决所有问题。没有灵丹妙药,一如既往,你在某些方面赢了,在其他方面输了。

    您提到了数据库创建方面。但如果没有数据提取,那将毫无价值。例如,您可以创建高效且快速的数据库创建方式,但如果数据选择非常慢,这并不重要。或者...不是,如果您最常见的场景是写入数据。

    还有更多的注意事项,如事务、查询等。所有这些都需要在数据库架构阶段加以考虑。

    总而言之,总有一些权衡,作为架构师,您应该定义所需功能的目标和指标以选择实施。

    您可以在分布式系统领域找到类似的技巧。例如,CAP theorem 声明您不能拥有具有所有三个保证(一致性、可用性、分区容限)的系统。所以有些人说:“我们想要 C 和 A,而不关心 P”。其他状态:“哦,我们肯定需要 C 和 P,不要介意太多 A”。所以有database systems meeting different kinds of wants

    您可以找到一些关于面向列的数据库的论文,例如 this onethisthis presentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2021-04-08
      • 1970-01-01
      • 2018-04-06
      相关资源
      最近更新 更多