如何在不覆盖整个文件的情况下将表中特定单元格的数据库操作(写入、更新、更改)写入磁盘?

Opt*_*Ray 4 sql-server database-recommendation cursors btree

当我想使用python写入或更改excel文件/表的特定单元格时,我将使用pandas read_csv然后更改特定单元格中的值并使用to_csv写回文件。但是写回文件似乎是用文件的更新版本覆盖整个文件,该文件仅在单个单元格中有所不同。当我更改万亿行和万亿列的表中的一个或两个单元格时,这是一个问题。

当我们在万亿个表中的单个单元格上进行写入/更改数据库操作(如在 SQL 中)时,似乎是在磁盘中仅对修改的单元格进行更改,而不是覆盖整个文件。

数据库如何促进仅写入/更新磁盘表中的特定单元格而不是覆盖整个文件?

顺便说一句,我没有使用 SQL 数据库,因为我的表包含数字列名,而 SQL 不支持。如果您知道任何支持数值作为列名的 SQL/NOSQL 数据库,请告诉我。

Phi*_* W. 14

可以通过以下方式消除对数据库的一个非常常见的误解:

    Database != File 
Run Code Online (Sandbox Code Playgroud)

当你在更新数据库中的行,磁盘上的基础数据文件没有触及根本-至少不是“一段时间”。相反,数据库会记录其事务日志中的更改,然后更新内存中的值。“某个时间”之后,数据库可能会需要该位内存用于其他用途,并将更改的值写入磁盘。这种情况发生的频率以及一次写入的内存块大小因 DBMS 不同而异。

数据库中的数据存储以Pages来衡量,每个Pages可以包含多个 Row;那些构成你和我玩的桌子的东西。当数据库需要一些数据时,它会计算出该数据在其数据文件中的位置,然后仅将那些相关的页面加载到其缓冲区缓存(内存)中。这就是为什么有些查询运行缓慢运行他们的第一次,但此后的闪电快-从Cache中一遍又一遍地服务于同一页面的方式比从磁盘上的数据文件拖起来更快。

...我没有使用 SQL 数据库,因为我的表包含数字列名称 ...

这是关于数据库的另一个误解,同样很容易消除:

    Database != SpreadSheet 
Run Code Online (Sandbox Code Playgroud)

刚开始时,您在数据库中构建数据的方式可能看起来很“陌生”;您似乎需要使用“复杂”、“人工”结构,而不仅仅是数据的“行”和“列”。但是,一旦你获得一个了解为什么你需要这些结构和权力,他们可以让您对您的数据,你会挺过来很快。

... 操作 ... 在万亿表中的单个单元格上 ...

你真的对万亿乘万亿表中的每一个值都有一个有用的价值吗?就我个人而言,我对此表示怀疑,除非你为 Google 工作。

我建议你实际拥有的是一个稀疏数组,其中你有比数据更多的“洞”。这是关系表可以非常轻松且非常有效地支持的结构。