我发现SQL CE不是线程安全的:
SQL CE对象不是线程安全的,也不是线程的亲和性。 如果SqlCeConnection或SqlCeTransaction的实例在线程间共享,但不确保线程安全,则可能导致Access Violationexception。
我需要共享连接,因为有很多客户端实例,每个客户端实例同时读取/写入数据库。
另外为了保持速度,我不想使用locking,我想我会需要使用标准的SQL服务器,是吗? 谢谢
没有数据库产品,无论你上链多高,都会让你的共享连接和线程之间的交易更加协调一致。 你将永远不得不序列化访问交易/连接。 你正在要求一个无意义的要求。 一个线程将提交另一个线程回滚? 有很多产品支持成千上万的客户端同时读写数据库。 没有,永远,线程之间的“共享”连接。
为了实现高度的可扩展性,你应该和其他人做同样的事情:
如果负载是读密集的,那么你可以考虑一个版本化的隔离模型,比如在SQL Server中读取提交的快照。 如果负载更新密集,那么您必须遵循OLTP原则,并使用简短的粒度锁进行更新,同时避免处理来自不同事务的相关项以减less死锁概率。
如果SQL CE有你需要的function,你应该看看sql express,而不是购买标准,但是没有产品被优化为多用户访问像SQL标准和以上。
你是正确的,SQL CE不支持多个连接进入一个数据库。 你需要把链条向上移动一些。
SQL Express将是下一步,而且在多用户场景下肯定可行。 最重要的是,它是免费的。 所以只要它的限制不会阻止你完成工作,你将会更好的使用它。
另外,到时候,它实际上是从Express到Standard的就地升级。