SaaS应用程序需要将数据导出/备份到各个客户站点

Chr*_*ken 11 .net c# saas sql-server-2008

我们有一个基于云的SaaS应用程序,我们的许多客户(学校系统)要求将他们的数据备份存储在现场.

我们所有的应用程序数据都存储在一个MS SQL数据库中.在"层级"的最顶端,我们有一个" 组织 ".该组织代表我们系统中的单个客户.每个组织都有许多子表/对象/数据.每个人都有FK关系,最终以"组织"结束.

我们需要一种方法从数据库中提取SINGLE客户的数据,并以某种方式将其捆绑,以便将其下载到客户站点.最好是在SQL Express,SQLite或访问数据库中.

例如:Organization -> Skill Area -> Program -> Target -> Target Data是系统中的所有表.每个人都通过FK链接回父母.我需要获得每个组织的所有目标数据,目标,程序和技能领域并导出该数据.

有没有人有任何关于如何在SQL Server,C#服务或第三方工具中执行此操作的建议?

我需要这个解决方案,以便为希望此功能"打开"的每个客户轻松复制

想法?

Not*_*ple 4

目前,我非常喜欢使用消息传递来传播数据,因此这里有一个基于消息的解决方案,它允许外部客户保留您在网络上提供的数据的本地同步副本。

基本架构是一个在线的、受密码保护的、用户特定的系统中发生的更改列表。在服务器端,每当与特定客户相关的实体发生更改时,都会附加此列表。在客户端将运行一个应用程序,该应用程序检查尚未收到的任何更改列表,然后将它们应用到其本地数据库(按照它们发生的顺序)。

有很多不同的方法可以实现系统的基于列表的组件,但我的直觉是你最好使用 RSS 之类的东西来做到这一点。

以下是其工作原理的实际场景:

  1. 为组织“我的组织”创建了一个新的技能领域
  2. 该技能将添加到中央数据库并与“我的组织”记录相关联
  3. SkillAreaExists 事件也会同时添加到“我的组织”RSS 中,其中包含指定新技能领域属性的 JSON 或 XML 数据
  4. 一个新程序被添加到刚刚创建的技能领域
  5. 该程序被添加到中央数据库并与技能领域相关联
  6. ProgramExists 事件也会同时添加到“我的组织”RSS 中,其中包含指定新计划属性的 JSON 或 XML 数据
  7. SkillAreaHasProgram 事件也会同时添加到“我的组织”RSS 中,其中包含指定技能领域和计划标识符的 JSON 或 XML 数据
  8. 客户端代理检查 RSS 提要并查看新消息并按顺序处理它们
  9. 处理 SkillAreaExists 事件时,新的技能区域将添加到本地数据库中
  10. 处理 ProgramExists 事件时,新程序将添加到本地数据库中
  11. 处理 SkillAreaHasProgram 事件时,程序将链接到技能区域

与传统的时间点复制相比,这种方法有很多好处。

  • 它是在线的,如果需要,消费者可以获取实时更新
  • 一致性是按顺序维护的,在事件流中的任何时间点,如果您停止接收事件,您就有一个本地数据库,它准确地反映了某个时间点的中央数据库。
  • 它基于 diff,您只需要收到更改
  • 它是可审计的,您可以看到实际发生的情况而不仅仅是当前状态。
  • 它很容易恢复,如果存在数据一致性问题,您可以通过重放事件流来恢复整个数据库。
  • 它允许多个消费者,客户信息的许多单独副本可以存在并自主运行。

我们利用这些在站点之间复制数据的技术取得了巨大的成功,特别是当它们有时在线时。