问题标签 [data-synchronization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1235 浏览

database - 如何通过 Flex/Air App 进行本地数据库管理

我计划使用 Flash Builder 4/Flex 编写一个主要基于记录、存储和分析数据的 AIR 应用程序。我将创建需要几乎实时更新的图表等。

对我来说,应用程序能够在没有互联网连接的情况下运行非常重要,因此我需要一个不同种类的本地数据库,但我最终还希望建立数据的在线同步,其中任一数据库都可以基于更新的数据库相互更新信息。此外,某些类型的加密肯定会受到欢迎,速度是一个很大的问题

同步:主要更新/添加/删除将在离线数据库上完成,但理想情况下,我希望有一个允许相同更新/添加/删除并同步的 Web 界面(除此之外,我不确定如何做到这一点,因为我可以根据最可实现的模型进行建模)。我想知道是否有任何预建引擎可以处理 2 个数据库的同步。我可能最终让 Web 界面仅用于添加,这将更容易同步.. 我可能会以这种方式开始,但我想使用最能让我在某个时候实现完整的在线 crud 的技术进行构建。

考虑到所有这些,我最好的方法是什么来避免头痛?

0 投票
8 回答
89610 浏览

iphone - 如何将 iPhone Core Data 与 Web 服务器同步,然后推送到其他设备?

我一直在研究一种在多个设备(例如 iPad 或 Mac)之间同步存储在 iPhone 应用程序中的核心数据的方法。iOS 上与 Core Data 一起使用的同步框架并不多(如果有的话)。但是,我一直在思考以下概念:

  1. 对本地核心数据存储进行更改,并保存更改。(a) 如果设备在线,它会尝试将变更集发送到服务器,包括发送变更集的设备的设备 ID。(b) 如果变更集没有到达服务器,或者设备不在线,应用程序会将变更集添加到队列中,以便在它上线时发送。
  2. 位于云中的服务器将其接收到的特定更改集与其主数据库合并。
  3. 在云服务器上合并更改集(或更改集队列)后,服务器使用某种轮询系统将所有这些更改集推送到向服务器注册的其他设备。(我想使用 Apple 的 Push 服务,但显然根据评论这不是一个可行的系统。)

我需要考虑什么花哨的事情吗?我看过 REST 框架,例如ObjectiveResourceCore ResourceRestfulCoreData。当然,这些都与 Ruby on Rails 一起工作,我不依赖于它,但它是一个开始的地方。我对解决方案的主要要求是:

  1. 任何更改都应该在后台发送而不暂停主线程。
  2. 它应该使用尽可能少的带宽。

我考虑了一些挑战:

  1. 确保将不同设备上不同数据存储的对象 ID 附加到服务器上。也就是说,我将有一个对象 ID 和设备 ID 表,它们通过对存储在数据库中的对象的引用来绑定。我会有一条记录(DatabaseId[对这个表唯一],ObjectId[对整个数据库中的项目唯一],Datafield1,Datafield2),ObjectId字段会引用另一个表,AllObjects:(ObjectId,DeviceId,DeviceObjectId)。然后,当设备推送一个变更集时,它将从本地数据存储中的核心数据对象传递设备 Id 和 objectId。然后我的云服务器会检查 AllObjects 表中的 objectId 和 device Id,并在初始表中找到要更改的记录。
  2. 所有更改都应加盖时间戳,以便可以合并它们。
  3. 设备将不得不轮询服务器,而不会消耗太多电池。
  4. 如果/当从服务器接收到更改时,本地设备还需要更新内存中保存的任何内容。

还有什么我在这里想念的吗?我应该看什么样的框架才能使这成为可能?

0 投票
4 回答
1911 浏览

sql-server-2008 - 将数据从一个sql表移动到另一个表的最有效方法是什么

目前我有一个 SSIS 作业,用于将数据从一台 sql 20008 机器移动到另一台机器。该作业从大约 6 个表中移动了大约 200 万条记录。这大约需要 5-10 分钟,具体取决于服务器负载,这很好。因为数据被移动到临时表中,所以除了服务器的压力之外没有任何影响。

但是当我现在想将该数据与其各自的实时表合并时,我的问题就变成了。这可能需要大约 15 分钟,在此期间表被清空然后重新填充。我想知道的是在表之间移动数据的最有效方法是什么。

目前情况如下:

删除表
重建带有索引和约束的表
插入选择以移动数据
然后运行所需的任何计算
运行以下命令以在移动数据后重建所有索引:

我觉得应该有更好的方法,以便用户的停机时间最短。我的一个想法是创建第二组表,然后在它们准备好后重命名它们,但我不确定这是否是最好的方法。

我也刚刚阅读了合并命令,这可能会更好,因为我不必删除表并重新填充,这意味着所有数据都将保持可用,但如果不查看几乎所有列就很难知道记录是否发生变化.

我将不胜感激任何帮助。

0 投票
1 回答
2228 浏览

synchronization - 基于云的同步架构

我正在考虑构建一个基于云的同步解决方案(类似于 Dropbox):

  1. 健壮的架构会是什么样子?

  2. 您需要哪些技术来支持不同的平台,如 windows、mac、linux 和移动设备?

  3. 你会使用什么有效的同步算法?

我知道一个天真的架构/解决方案是:

  1. 对您的云存储进行网络调用并获取同步文件夹树结构(只是元数据信息)。

  2. 在客户端有一个文件系统监视器来构建本地同步文件夹树结构(我猜你会使用类似 lsyncd 的文件系统监视器?)

  3. 从上一次同步中检索同步文件夹结构。现在您在客户端上有 3 个文件夹树结构。使用这 3 棵树可以确定需要在本地文件夹上做什么以及需要在服务器上的远程文件夹上做什么。例如,使用某种特定于应用程序的预定规则添加、删除、编辑、解决冲突等。

这种架构可能就足够了,但魔鬼在细节中。如果同步文件夹树非常大(非常宽且非常深)怎么办。显然,需要一种有效的算法来确定差异。如果网络连接中断并且您没有正确获取或发送整个树怎么办?还仅发送文件差异以减少网络负载等。

我知道这些是我设计的东西,但我的问题是这个架构是否足够,我是否应该把时间花在细节上?Dropbox 是如何设计的,他们使用什么技术和算法来使大型文件夹结构和数据大小的同步如此高效?有什么资源/书籍我可以参考设计这样的东西吗?

提前致谢。

0 投票
3 回答
1933 浏览

database - 适用于同步线上线下数据的方法

我有两个带有自己数据库的应用程序。

1.) 具有vb.net winforms界面的桌面应用程序,在离线企业网络中运行,并将数据存储在中央数据库[SQL Server]
**所有的数据录入和其他办公操作都在中央数据库中进行并存储

2.) 第二个应用程序是基于 php 构建的。它具有 html 页面并在在线环境中作为网站运行。它将所有数据存储在mysql数据库中。
**此应用程序仅供注册会员访问,他们可以通过第一个应用程序处理的数据的不同报告获得便利。

现在我必须在在线和离线数据库服务器之间同步数据。我计划如下:
1.) 编写一个小程序,将 SQL Server [离线服务器] 的所有数据导出到 CVS 格式的文件中。
2.) 登录到实时服务器的管理部分。
3.) 将导出的 cvs 文件上传到服务器。
4.) 将 cvs 文件中的数据导入 mysql 数据库。

我计划的方法是好还是可以调整为好。除了更改应用程序之外,我还将感谢其他不错的数据同步方式..即。网络应用程序到其他一些使用 mysql 数据库的应用程序

0 投票
2 回答
5532 浏览

sql - 如何提高 SQL MERGE 语句的性能

我有一项工作正在运行,以在不同内部服务器上的两个数据库之间同步数据。一台服务器是 FrontRange 的 HEAT 产品的后端数据库。第二个是我们自己的报告数据库,我们用于报告编写和其他内部使用。

我们在工作中的第一个方法是这样的:从我们想要的 HEAT 数据库表中查询所有数据并填充本地临时表。然后将该数据复制到相应的表中。这会起作用,但他们每次都使用 TRUNCATE 表并重新填充而不对索引或碎片做任何事情。所以我认为这可能是使用 SQL 合并语句的好选择。

所以我们的第二种方法对每个表都使用了一个合并语句。它极大地提高了进程的速度,但似乎锁定了源表,因此用户在尝试保存信息时会注意到 15-30 秒的延迟。为了使合并仅处理已更改或新的记录,我在 select 上添加了 BINARY_CHECKSUM 函数并将其存储在我身边,这样我就可以避免更新未更改的记录。尽管为每条记录调用它似乎很昂贵。该表有大约 30 万条记录。

我想知道是否有更好的方法来尝试同步我忽略的这两个表。我唯一的限制是我真的不想更改源表上的任何内容,因为它是第三方应用程序。

这是我用于 CallLog 表的 mege 语句:

0 投票
2 回答
1616 浏览

c# - Sql server 数据库同步

我有 1 个应用程序,在这种情况下,我只能为每台 PC 使用本地数据库....现在,如果从 1 台 PC 完成一些注册,那么该数据应该存储在本地数据库中,并且应该发送到另一个PC...简而言之,我想同步所有数据..

我需要清除 1 件事,即“无法集中数据库……我不能使用 1 个数据库并从所有 PC 连接到它……”所以我只需要同步……

我正在使用 SQL SERVER Express Edition... 并在 C# .NET 中开发应用程序

如果有任何疑问,你可以问我,我会描述更多......

数据库同步

0 投票
1 回答
2694 浏览

sql-server-2008 - DbNotProvisioned Exception while synchronizing 2 database

Hi following is my code...I am trying to synchronize 2 database.. but getting exception like:

DbNotProvisioned Exception

The current operation could not be completed because the database is not provisioned for sync or you not have permissions to the sync configuration tables.

0 投票
1 回答
158 浏览

database-design - 数据库设计困境。向导还是整数?

我目前有以下表格

以上是我想重新分发给我的应用程序用户的数据库的一部分。
我的应用程序的用户将被允许添加他们自己的国家和城市。当他们添加自己的城市时,根据当前的数据库设计,显然会增加 City.Id 主键值。
但是,我希望在某个阶段允许用户从彼此的数据库中“推”或“拉”国家/城市。例如。User1 在他的城市表中有附加值:

而 User2 在他的城市表中有以下内容:

每个人都希望在他们的城市表中拥有彼此的城市。一旦每个人都推送了他们不同的城市数据,他们的 City.Id、City.Name 属性就不会完全对应。

用户1:

用户2:

我希望拥有 City.Id、City.Name 属性,以便在所有用户数据库中具有相似的外观。

那么我应该更喜欢 City.Id 的用户 guid 吗?或者有谁知道我可以实现这种所需同步的替代方法。

0 投票
4 回答
7686 浏览

.net - 在 (.NET 4.0 C#) Sync Framework 4.0 CTP 中将“0”/“1”解析为布尔值

是否有可能有某种类型转换器允许 Sync Framework 将字符串“0”/“1”视为 false/true 的布尔值。根据bool.parse文档,默认情况下不支持它,所以有没有办法解决它?

如果有人可以提出不同的方法来解决此问题,请提供更多详细信息:我有一个针对 android 的自定义 Sync Framework 客户端实现,并且由于它使用 SQLite 数据库,因此我无法对表字段强制执行一些严格的数据类型。我可以想出约定用“Is”前缀来表示布尔字段,但这很讨厌。另一件事是 SQLite 中的布尔值被视为数字类型,因此向 SQLite 数据库插入/更新布尔值 false/true 会自动将它们转换为 0/1,我不想在 android 端引入一些 TRUE/FALSE = 1/0 转换.

欢迎任何想法。

[更新] 更多细节:服务器端包含一些使用 Microsoft Sync Framework 4.0 CTP 的服务。除了创建范围等之外,没有太多要配置的东西。客户端生成变更集并使用 JSON 格式将其传输到服务器。变更集来自 SQLite 数据库(并且 SQLite 除了数字 0/1 之外没有任何本机布尔表示),因此在读取数据库时没有迹象表明即将到来的数据是布尔类型。字段值作为带有数值(“0”或“1”)的字符串序列化为 JSON 对象,因此服务器端在尝试将其解析为布尔值时失败。

顺便说一句,如果进行单向客户端到服务器同步,则可以解决它。我手动将服务器端实体字段类型设置为字节,同步框架很好地将其用作“位”数据库类型。此解决方法不适用于服务器到客户端。