【问题标题】:Database Relational Records Archive & Restore数据库关系记录存档和恢复
【发布时间】:2014-06-15 18:41:30
【问题描述】:

几年前,我创建了一个小型系统来满足以下要求:将来自 Android 的快照图像连同其各自的自定义数据上传到服务器上,然后存储在磁盘上,并且描述图像的自定义数据被进一步分解并存储在数据库中。每个拍摄的图像实际上都是活动的一部分。在此期间,该系统继续增长,现在已经有超过 10,000 个活动,每个活动超过 500-1000 张图像。虽然,性能并不是那么糟糕,但我相信这只是时间问题。我们现在正在考虑将过去的活动归档到另一个名为 Archive 的数据库中。现在这是我打算做的事情。

  1. 存档数据库将具有完全相同的结构,并且存档功能可能具有搜索机制,但是,检索速度在此不是太大问题,因为这种情况很少发生。
  2. 我正在考虑从一个数据库中删除记录并将其克隆到另一个数据库中,但是身份列可能不会让我非常无缝地做到这一点。 (我也可能错了。)
  3. 还需要一个恢复选项。 (这可能是最具挑战性的部分)
  4. 如果我只是将原始数据库中的记录设为空白(身份除外)并将其复制到另一个没有身份约束的数据库中,可能不会有帮助,而且我认为它会失去练习的目的。

对此有什么建议吗?是否有任何已知的策略或模式或文献甚至可以指导我的链接?

提前感谢您的帮助。

【问题讨论】:

    标签: c# sql sql-server database sql-server-2008


    【解决方案1】:

    我说:只要您的服务器上没有空间不足,就让它保持原样。

    在此期间,系统不断发展壮大,现在已经有超过 10,000 个广告系列,每个广告系列有超过 500-1000 张图片。

    → 那是 5-10 百万行(在几年内创建)。
    对于 SQL Server,这还不算多。
    是的,我知道...我们谈论的是存储在数据库中的图像文件,而不是“常规”行。不过,如果您的服务器具有合理大小的硬件,那应该没关系。

    我说的是这里的经验 - 在工作中,we have a SQL Server database which we use to store PDF files and images
    在我们的例子中,我们使用“常规”image 列 - 因为您使用的是 SQL Server 2008,您甚至可以使用 FILESTREAM (也许您已经这样做了,但我不知道 - 你没有说明您将图像存储在数据库中的确切程度)
    我们在 SQL Server 2005 上启动了该项目,其中 FILESTREAM 尚不可用。与此同时,我们升级到 SQL Server 2012,但从未更改我们存储文件的表中的数据类型。


    如果您仍然喜欢创建一个单独的存档数据库并将旧数据移到那里,关于此的一条建议:

    2) 我正在考虑从一个数据库中删除记录并克隆它 在另一个,但是身份列可能不会让我这样做 那非常无缝。 (我也可能错了。)

    [...]

    4) 如果我只是将记录设为空白(身份除外) 原始数据库并将其复制到另一个没有身份的数据库 约束,可能不会有帮助,我认为它会松动 练习的目的。

    您也不需要在存档数据库中将该列设置为identity
    只需将所有内容保留在主数据库中,但从存档数据库的主键中删除 identity 设置。
    存档数据库不需要生成新的密钥(因此不需要identity,您只是从主数据库中复制具有现有密钥的行。

    【讨论】:

      【解决方案2】:

      我认为 SSIS 是适合您的解决方案。该技术可以为您的存档系统提供大量数据的快速加载。此外,您可以使用表分区来提高归档系统中大数据操作的性能。还要检查诸如 comumnstore 索引之类的东西(但它取决于 SQL 服务器的版本)。 我通过以下步骤创建了这样的解决方案: 1)在生产系统中将分区从主表t切换到另一个表t_1(表中最旧的行) 2) 将数据从表 t_1 加载到存档系统 3) 删除或截断表 t_1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-17
        • 2013-02-23
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 2017-02-16
        • 1970-01-01
        相关资源
        最近更新 更多