服务器管理的客户端中数据库的本地副本

时间:2012-06-12 12:21:39

标签: database wcf synchronization client-server local-storage

我有一个外部连接有限的数据库(最多5个)。由于这个原因,我引入了维护所有数据库操作的服务器应用程序。该服务器使用带回调的WCF服务来通知客户端所有更改。客户端在序列化词典中存储数据库的本地副本。当一切正常时,如果一个客户端或服务器执行更改,则几乎立即通知所有其他客户端/服务器。问题是,有时客户端不同步,只有修复方法是删除数据库的本地副本(有时也在服务器上)。我发现当从数据库中删除某些对象时会发生这种情况。我使用带有自动更新的datetime来查找已更改的行,但这对删除的对象不起作用。一个表有超过160000行,所以将它们与本地副本进行比较是很麻烦的。所以问题是:

1)任何人都可以指出我用于创建和维护数据库本地副本的好算法(在实际数据库和服务器之间,以及服务器和客户端之间)(我不能使用复制)

2)比序列化词典更好地在本地存储它。(app加载所有数据时占用大量空间)

PS。我想到了几个没有数据库的解决方案,但我总是得出结论,我需要本地副本。

1 个答案:

答案 0 :(得分:0)

  

1)任何人都可以指出我的创建算法和   维护数据库的本地副本(在实际数据库和服务器之间,   以及服务器和客户端之间)(我不能使用复制)

在您的情况下,最简单的解决方案可能是将IsDeleted列添加到数据表中。 在这种情况下,您不应更新同步过程(除了添加对该新列的支持),但您需要使用“而不是IsDeleted = 1”where子句更新SQL查询。

如果要跟踪对象何时被删除,您还可以使用DeletionDate和“并且DeletionDate不为空”。

这种方法有限制,但它可能是删除记录问题最具成本效益的解决方案,因为同步算法不受影响。

  

2)比序列化词典更好地在本地存储它。(app   加载所有数据时占用大量空间

如果在内存中存储数据不合适,我会使用文件。对于大数据集,平坦的TXT文件或XML不是很好的表现者。您可以使用紧凑的RDBMS或No-SQL数据库。我对No-SQL不是很熟悉所以不能在这里提出建议。 MS SQL Compact 4.0非常轻巧,可以在您的情况下使用。您只需将几个DLL复制到客户端计算机即可开始使用它,您的MS SQL体验仍然适用。

http://msdn.microsoft.com/en-us/library/aa983326(v=vs.110).aspx

相关问题