数据库是否可以被完全覆盖 n 次而不会有截断数据的危险?

May a database be completely overwritten for n times without danger to truncate data?

一个简单但可能过于业余的问题,但是:数据库上的 table 是否可以始终(例如,每天)完全覆盖?

我从头到尾拿到一整年的数据day/week/month。你可以只追加新的月份,但我担心文件中有过去几个月的一些新数据。所以每次我得到一个新文件时,我都想覆盖我的table。但是 table 可以吗?我的意思是它会以某种方式破坏它吗?

编辑: 我的问题的背景是我覆盖了 RapidMiner 工具中的数据,我不知道它使用什么方法。所以我可能应该和 RapidMiner 支持人员谈谈这件事。

在我看来,您无法破坏这种情况下的某些特定内容,但总的来说这似乎是一种非常奇怪的行为。

我想,您需要一些与您现在使用的完全不同的东西。我没有完全理解问题,也许你可以提供更多的算法来解决你的问题?

替换历史数据是一种合理的做法。在加载新数据之前,大概您正在做以下事情之一:

  • 截断现有 table
  • 正在删除行
  • 删除 table

其中只有第二个冒着 table 碎片化的风险。但是当数据被批量加载时,这可能不是什么大问题。

更大的问题是历史数据何时发生变化。那么,您 1 月份的结果可能会有所不同 ,因为数据发生了变化。当您删除旧数据后,这可能很难跟踪。

此答案的目的不是为该问题提供解决方案(这不是您问题的一部分)。只是指出除了覆盖 table.

之外可能还有其他考虑因素

嗯,这里是一个简短的总结。

  1. 这取决于数据库。

For instance, regularly overwriting a Datomic database would be a Really Bad Idea -- not due to corruption, but on account of storage requirements. by @Charles Duffy

  1. 我也在 "Database Administrators" 社区网站上发布了这个问题并得到了答案,RDBMS 不应该通过多次覆盖数据来破坏我的数据

  2. 删除行会分割 table,而不是删除 table。

"But that probably isn't a big deal when the data is being loaded in bulk" (by @Gordon Linoff)

  1. 因此 RDBMS 不会损坏,但您还需要注意一些其他事项:存储要求等

结论:多次完全覆盖数据对数据库没有直接(负面)影响。

谢谢大家的回答。我的问题的上下文是我不是自己覆盖数据,而是在 RapidMiner 工具中覆盖数据,我不知道它使用什么方法。

CREATE TABLE new ...
load `new`, not `real`
RENAME TABLE real TO old, new TO real;
DROP TABLE old;

这使 table 始终可用,即使在您重新加载它时也是如此。