0

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

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

2)比序列化字典更好的本地存储方式。(加载所有数据时应用程序占用大量空间)

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

4

1 回答 1

0

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

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

DeletionDate如果您想跟踪对象何时被删除,您也可以使用“and DeletionDate is not null”。

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

2)比序列化字典更好的本地存储方式。(加载所有数据时应用程序占用大量空间)

如果在内存中存储数据不合适,我会使用文件。平面 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

于 2012-06-12T15:54:26.223 回答