Sql 内部简单数据同步
我知道这篇文章很长,但也包含了解决我问题的建议。因此,问题本身并没有那么长。。。不要害怕 请帮助我处理以下场景: 我将有一个SQL server,我将在其中存储数据集。我还将拥有一组需要与服务器同步的PC客户端(所有客户端都有自己的本地SQL server)。PC将被唯一标识 例如: 假设我有两个PC客户端,PC1和PC2 在服务器上,我有以下数据集: DS1 DS2 在客户端PC上,我不会有任何开始。当PC1连接到服务器以查看“是否有新内容”时,它会注意到需要检索两个数据集,以便使用DS1和DS2更新其本地数据库。PC2也会发生同样的情况。现在,假设PC2在本地修改DS2。当PC2连接到服务器时,它将使用对其本地DS2所做的更改更新服务器上的DS2。最后,当PC1再次连接以查看是否有任何更改时,它将注意到DS2已更改,并将从服务器检索它并用DS2覆盖其本地DS2 不要担心并发问题,因为不是所有的PC都可以更改任何数据集。只有特定数据集的所有者才能更改它(所有者被定义为单个PC。) 我想到了一些解决方案,但它们似乎不是很有效;也许其他人会有一些想法 第一种解决方案: 在服务器上,我将创建一个名为“SyncTable”的表,在其中写入对数据集的任何更改 例如: 假设PC1需要检索DS1,PC2需要检索DS4和DS5 同步表将包含: PC1 DS1Sql 内部简单数据同步,sql,synchronization,sync,Sql,Synchronization,Sync,我知道这篇文章很长,但也包含了解决我问题的建议。因此,问题本身并没有那么长。。。不要害怕 请帮助我处理以下场景: 我将有一个SQL server,我将在其中存储数据集。我还将拥有一组需要与服务器同步的PC客户端(所有客户端都有自己的本地SQL server)。PC将被唯一标识 例如: 假设我有两个PC客户端,PC1和PC2 在服务器上,我有以下数据集: DS1 DS2 在客户端PC上,我不会有任何开始。当PC1连接到服务器以查看“是否有新内容”时,它会注意到需要检索两个数据集,以便使用DS1和D
PC2 DS4
PC2 DS5 因此,当PC2连接到服务器时,它会查看这个表,注意到它需要下载DS4和DS5,然后继续下载,然后从服务器表中删除它的两个条目。因此,在PC2自身同步之后,服务器表将只包含“PC1 DS1”。下次,当PC2连接时,注意到它没有条目,因此知道它是“最新的”。当PC1连接时,会发生完全相同的事情:它会注意到需要下载DS1,下载它,然后删除条目 问题是,如果有10000台电脑,可能修改了5000个数据集,我会在这个表中有很多条目 第二种解决方案是存储与每个数据集关联的修改后的时间戳。这样做的问题是,客户端PC必须检查其所有本地记录,并将本地时间戳与服务器上的最后一个时间戳进行比较,以查看是否有任何更改。如果有大量记录,则不确定这是否有效。看来,如果他们能直接知道在哪里寻找变化,而不是每次都查看所有记录,那会更好 因此,您对此有何建议 使用的技术:客户端PC上的MS SQL Server Compact Edition 3.5和服务器上的MySQL。通信将通过web服务完成。因此,无法进行合并复制/远程数据访问
谢谢 您正在考虑两种选择
I have DS1=<time>, DS2=<time> ...; which do I need to download?
我有DS1=,DS2=。。。;我需要下载哪一个?
实际决策是由服务器根据客户端发送的数据做出的,而不是客户端获取数据以允许其自己做出决策
顺便说一句,我应该指出,还有一些商业产品可以处理这一切。你真的需要编码吗?嗨,Djna!谢谢你的回答。关于解决方案2,您确实有一个有趣的建议。但是,如果我有大量的数据集,恐怕我必须向服务器发送大量的时间戳,以便服务器能够决定返回什么。例如,如果我有10000个数据集,我必须发送10000个时间戳。我想我应该能够用16个字节来表示时间戳,对于一个数据集ID,再加上4个字节。因此,我猜10000个数据集的数据本身应该是200k。这个数据集可能会增长到15万个,但是如果你有1万个过时的数据集,那么数据量将是荒谬的,更不用说时间戳了。如果与整体可用数据相比,设定的过期日期可能比较少,则使用一些更巧妙的方案。例如,按层次组织数据并按层次更新数据。“我已经在1月14日1日14:15更新了data/abc下的项目”之后有什么变化吗?谢谢你关于层次结构的建议。听起来真是个好主意!