几年前,我创建了一个小型系统,以满足这样一个要求:将来自android的快照图像连同其各自的自定义数据一起上传到服务器上,然后存储在磁盘上,描述该图像的自定义数据进一步分解并存储在数据库中。每一张截图实际上都是竞选活动的一部分。在这段时间里,该系统继续保持足够的增长,现在已经有超过10000个活动,每个活动有超过500-1000个图像。不过,表演并没有那么糟糕,不过我相信这只是时间问题。我们现在正在考虑将过去的活动归档到另一个名为archive的数据库中。现在我打算做的是。
存档数据库将具有完全相同的结构,存档功能可能有一个搜索机制,但是,检索速度在这里不是很重要,因为这种情况很少发生。
我正在考虑从一个数据库中删除记录并将其克隆到另一个数据库中,但是identity列可能不会让我做到非常无缝。(我可能也错了。)
还需要一个还原选项。(这可能是最具挑战性的部分)
如果我只是将原始数据库中的记录设置为空(除了标识),然后将其复制到另一个数据库中,而不受标识约束,那么这可能不会有帮助,而且我认为这会失去练习的目的。
有什么建议吗?是否有任何已知的策略、模式或文献,甚至是一个链接,可以指导我在这方面?
提前谢谢你的帮助。

最佳答案

我说:只要服务器上的空间没有用完,就保持原样。
在这段时间里,该系统继续保持足够的增长,现在已经有超过10000个活动,每个活动有超过500-1000个图像。
这是5-10百万行(几年来创建的)。
对于sql server来说,这还不够。
是的,我知道…我们说的是存储在数据库中的图像文件,而不是“常规”行。不过,如果您的服务器有合理大小的硬件,这并不重要。
我是从工作经验说起的。
在我们的例子中,我们使用的是“regular”image列—因为您使用的是SQL Server 2008,所以您甚至可以使用we have a SQL Server database which we use to store PDF files and images(也许您已经使用了,但我不知道—您没有说明将图像存储到数据库中的确切程度)。
我们在sql server 2005上启动了这个项目,在那里FILESTREAM还不可用。同时,我们升级到了sql server 2012,但从未更改存储文件的表中的数据类型。
如果您仍然希望创建一个单独的存档数据库并将旧数据移动到其中,请给出一条建议:
2)我正在考虑从一个数据库中删除记录并克隆它
但是在另一个,身份栏可能不允许我这么做
非常完美。(我可能也错了。)
[…]
4)如果我只是将
原始数据库并复制到另一个没有标识的数据库
约束,可能没用,我想它会松的
演习的目的。
您也不需要在归档数据库中将列设置为FILESTREAM
只需保留主数据库中的所有内容,但从存档数据库的主键中删除identity设置。
存档数据库不需要生成新的密钥(因此不需要identity),只需从主数据库复制已经存在的键的行即可。

关于c# - 数据库关系记录存档和还原,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24232889/

10-10 17:17
查看更多