当我想使用python写入或更改excel文件/表的特定单元格时,我将使用熊猫read_csv,然后更改特定单元格中的值,然后用to_csv将其写回文件。但是,将文件写回文件似乎是用更新后的文件版本覆盖整个文件,该文件仅在单个单元格中不同。当我更改由万亿行和万亿列组成的表中的一个或两个单元格时,这是一个问题。
当我们在一万亿个表中对单个单元格进行写/更改数据库操作(如SQL中的操作)时,似乎只对修改过的单元格进行磁盘更改,而不是覆盖整个文件。
数据库如何方便地只在磁盘中的表中写入/更新特定的单元格而不是覆盖整个文件?
顺便说一句,我不使用SQL数据库,因为我的表包含数字列名,而SQL不支持这一点。如果您知道任何支持作为列名的数值的SQL/NOSQL数据库,请告诉我。
发布于 2019-04-16 10:59:03
可以消除对数据库的一个非常普遍的误解:
Database != File 当您更新数据库中的行时,磁盘上的底层数据文件根本不会被触及--至少在“一段时间内”不会。相反,数据库会记录其事务日志中的更改,然后更新内存中的值。稍后“某个时候”,数据库可能会需要一些其他的内存,并将修改后的值写入磁盘。这种情况发生的频率和一次写入的内存块的大小因DBMS而异。
数据库中的数据存储是以页面来衡量的,每一页都可以包含许多行;构成您和我所玩的表的那些东西。当数据库需要一些数据时,它会计算出该数据在其数据文件(S)中的位置,然后只将那些相关的页面加载到其缓冲区缓存(内存)中。这就是为什么有些查询在第一次运行时运行缓慢,但在运行之后速度很快--从缓存中一遍又一遍地服务同一个页面比从磁盘上的数据文件中将其拖上来要快得多。
..。我不使用SQL数据库,因为我的表包含数字列名.
这里还有另一个关于数据库的误解,同样很容易消除:
Database != SpreadSheet 在数据库中构建数据的方式在刚开始时看起来非常“陌生”;您似乎需要使用“复杂的”、“人工的”构造,而不仅仅是数据的“行”和“列”。但是,一旦你了解了为什么你需要这些结构,以及它们给你的数据带来的力量,你就会很快地克服它。
..。行动..。数以万亿计的单细胞.
你真的对一万亿的表中的每一个值都有一个有用的值吗?就我个人而言,我会怀疑,除非你为谷歌工作。
我建议您实际拥有的是一个稀疏数组,其中您有比数据更多的“洞”。这是关系表可以非常容易和非常有效地支持的结构。
https://dba.stackexchange.com/questions/234890
复制相似问题