我目前正在开发一个我们想要开发的应用程序的C#项目。我们正在就用户之间共享数据的问题进行头脑风暴。我们希望能够指定一个文件夹,其中应用程序的所有文件将被保存,并且我们希望能够将它们保存在共享文件夹(服务器,不同的PC或Mac,Nas等)上。 )。在服务器上没有数据库的共享网络上的数据应用程序体系结构
部署会像这样:第一台PC上
- 安装,我们选择一个网络驱动器,共享,任何创造的所有文件在此位置的应用程序。
- 在我们安装的应用程序,我们选择了相同的位置(在网络上)的第二台PC,应用程序不会产生任何东西,它认为它已经存在,它使用这些文件作为应用程序的数据
- 同在其他客户端上的东西
应用程序的文件将成为文档(最有可能的XML格式的文档),当打开应用程序时,我们要显示所有现有的文档。问题是,我们不仅希望获得文档列表并能够编辑它们的内容,还希望能够编辑文档的属性,所以我们想要一个文件(Sqlite, XML,无论什么)表示所有文档及其属性的列表。地址列表同样的东西。
我知道所有与数据库解决方案完全一样的客户端/服务器,但这种解决方案是不可能的。我首先在查看数据文件的SQLite,但我知道并发性可能是一个真正的问题,并且文件锁定效果不佳。问题是,我会遇到与简单的XML文件相同的问题(在多个用户正在工作时刷新内容,访问锁定的文件)。
所以我想我最后的问题是:它是否可行?有没有其他方法可以让我们更轻松地做到这一点?
编辑:
好的,我不回应每一个岗位或评论,因为我目前使用SQLite测试并发。我做了什么,如果我测试这种方式是错误的,请纠正我,是启动X BackgroundWorker,它们都将在示例数据库中插入记录(每次启动应用程序时都会重新创建)。我尝试通过这些背景工作者在数据库中启动100次INSERT迭代。
当然,并发性正在运行一个应用程序,它只是等待最后一个BackgroundWorker完成它的工作,然后写下一个记录。我也尝试在几乎同一时间插入,这意味着我在每个等待模5时间戳(每5秒钟,每个BackgroundWorker运行)的BackgroundWorker中放置一个循环。再次,它正在等待上一个插入查询在下一个之前结束,一切工作正常。我甚至用500个BackgroundWorkers试了一下,效果很好。
然后我尝试多次启动我的应用程序并同时运行它们。当我这样做时,确实有一些问题。有两个我的应用程序的实例仍然正常工作,但是当它用4-5个实例进行尝试时,它确实有问题,并且出现了两种类型的错误:1.数据库被锁定2.磁盘I/O故障。但是大多数锁定的数据库。
我做的事情非常密集,在我的应用程序的场景中,它永远不会遇到5个进程,试图同时插入500个hunded行(也许我会得到两个或三个连接的并发)。但是真正困扰我的是什么让我认为我的测试方法不是一个好的方法,那就是我遇到了这些错误,试图在共享网络上,NAS上以及我自己的硬盘上工作。每次它可能为30-40查询工作,然后扔我“数据库被锁定”的错误。
我测试它错了吗?也许我不应该这么努力地完成这项工作,但我仍然不相信SQLite不是我想要做的很好的选择,因为并发将会非常小。
为什么你不能使用数据库服务器? – Maarten 2014-10-28 09:55:38
从你的问题来看,似乎你想对原始XML文件有类似数据库的数据访问。你能解释为什么一个数据库是不可能的吗?我只能猜测,但你知道你可以将XML文件存储在数据库中吗? – DMAN 2014-10-28 09:55:40
我们针对的是非常小的客户(大部分时间没有服务器,只有外部硬盘或Nas),我们希望能够在一台PC上使用该应用程序或在多台PC上共享数据,但项目不包括开发服务器版本。我们也想提出一个完整的试用版本,这并不适合客户/服务器解决方案。最后一件事:我们与客户端/服务器应用程序建立了合作伙伴关系,我们每天都会在这些架构中看到许多问题(访问权限,防火墙等)。我们不希望这样。 – 2014-10-28 10:07:52