当我想使用 python 写入或更改 excel 文件/表的特定单元格时,我将使用 pandas read_csv 然后更改特定单元格中的值并使用 to_csv 写回文件。但是写回文件似乎是用仅在单个单元格中不同的文件的更新版本覆盖整个文件。当我在万亿行和万亿列的表中更改一个或两个单元格时,这是一个问题。
当我们在数万亿个表中的单个单元格上进行写入/更改数据库操作(如在 SQL 中)时,它似乎是在磁盘中仅对已修改的单元格进行更改,而不是覆盖整个文件。
数据库如何促进仅写入/更新磁盘表中的特定单元格而不是覆盖整个文件?
顺便说一句,我没有使用 SQL 数据库,因为我的表包含数字列名,而 SQL 不支持它。如果您知道任何支持数值作为列名的 SQL/NOSQL 数据库,请告诉我。
关于数据库的一个非常普遍的误解可以通过以下方式消除:
当您更新数据库中的行时,根本不会触及磁盘上的基础数据文件- 至少在“一段时间”内不会。相反,数据库会在其事务日志中记录更改,然后更新内存中的值。“一段时间”之后,数据库可能会需要那部分内存来做其他事情,并将更改的值写入磁盘。这种情况发生的频率以及一次写入的内存块的大小因 DBMS 而异。
数据库中的数据存储以Pages为单位,每个 Pages 可以包含多个 Rows;那些构成你和我玩的桌子的东西。当数据库需要一些数据时,它会计算出该数据在其数据文件中的位置,然后仅将那些相关的页面加载到其缓冲区缓存(内存)中。这就是为什么某些查询在您第一次运行时运行缓慢,但之后却快如闪电 - 从缓存中一遍又一遍地提供相同的页面比从磁盘上的数据文件中提取它要快得多。
这是关于数据库的另一个误解,再次很容易消除:
刚开始时,您在数据库中构建数据的方式可能看起来很“陌生”;您似乎需要使用“复杂”、“人工”构造,而不仅仅是数据的“行”和“列”。但是,一旦您了解了为什么需要这些结构以及它们赋予您的数据处理能力,您就会很快克服它。
你真的对万亿逐万亿表中的每一个值都有一个有用的值吗?就个人而言,我会怀疑,除非你为谷歌工作。
我建议你实际上拥有的是一个稀疏数组,其中你的“洞”比数据多。这是关系表可以非常轻松且非常有效地支持的结构。