我需要一些关于我的想法的意见。如果您对SQLite和最低预算的高端解决方案感兴趣/经验丰富(现在只赢);)这适合您。 在充实这个问题的同时,我对这个想法感到非常兴奋,所以请耐心等待。 有TL; DR低于
我用SQLite开发了一个VB.NET(3.5)桌面应用程序。数据是在EAV模型中构建的,因为我需要这种灵活性(数据的语义结构分别存储在XML文件中)。该应用程序实际上的表现远远超出我的预期,即使是 - 对于手头的场景 - 大型数据库(主文件大约120MB)。
当SQLite文件位于网络文件夹中时,预期性能非常糟糕。这是可以忍受的,但我有更高的目标。预期的情景(现在)是最大的。 10个需要在本地Windows网络中同时访问数据库的用户。重读取访问需要98%的并发,插入和更新很少且很小。
该软件几乎专门用于预算较低的环境,技术基础设施(支持和硬件)甚至更低,因此我的目标是避免使用数据库服务器。我也不想实现我自己的SQLite" Server" a la SQLitening(即告诉应用程序的一个实例自动"共享"网络中的数据库),因为我希望数据库能够驻留在独立的网络驱动器上。
我意识到这种情况后的第一次冲动无法通过优化查询进行修改,这是一种“懒惰的同步”#34;实施的方法几乎无痛。该数据库是" wiki-esque" (几乎)只插入,因此根本不会出现任何(很多)冲突问题:无论谁来,"最后"获胜,每个字段都有一个带有时间戳和用户ID的更改历史记录,可以单独回滚。条目被"标记为已删除"并且可以在"清理" -action时丢弃。 虽然它的代价是永远不会"生活"使用其他用户在会话期间更改或输入的数据,以及同步过程可能需要一段时间,用户可能会在" rush-hour"中相互阻塞。我们说的最糟糕的情况可能只有几分钟,这不是什么大问题,但也不会很酷。
TL; DR:如何使用SQLite为最终用户应用程序实现实时无服务器本地网络共享数据库,该应用程序已在具有<的方案中的本地数据文件上执行得非常好/ p>
让我们进一步假设
现在我想到的是为每个会话实现差异文件,这些文件将在本地缓存以进行读取访问。
在客户会话开始时:
如果更改或未缓存,也会复制所有特定于会话的文件(见下文)
会话期间的所有INSERT都会写入共享目录中的一个特定于会话的小文件
这会
这听起来对我来说太棒了。
问题: 是否有这个&#34;协议的名称&#34;我在概述所以我可以做进一步的研究?
你认为这是一个可行的方法与SQLite或这是一个疯狂的追逐 - 我是否忽略了明显的缺点?
如果您已经加入,会话文件的大小(n * page_size?)会是什么?
感谢您的投入!
了Christoph
答案 0 :(得分:0)
对我来说,你正在尝试重新发明轮子!
您的应用程序开销,例如复制大型数据库文件,肯定会超越超级SQLite引擎。并且这种方法会产生很多隐私问题(可能不是在您的情况下,而是在隔离的服务器/客户端环境中)。
此外,您的“自定义RDBMS”肯定会违反ACID合规性。
最后,您的要求接缝非常适合Situations Where SQLite Works Well。