我想知道我的决定是否正确。我正在开发一个应用程序,允许用户混合来自本地数据库(可能是 SQL CE 或 SQLite)和来自远程共享数据库(最可能是 MySQL)的数据库条目。理想情况下,它必须灵活并与多种数据库服务器类型兼容(根据初始配置静态地,而不是动态地混合多种类型),但这不是一个阻碍。
代码是 C#,.NET 4。
自然而然地,我想到了 NHibernate,因为它在 3.0 版中具有 LINQ,代码可读性和效率的优势,并且模型优先方法比 Entity Framework 更自然。它还有用于混合数据库部分的碎片,这应该更容易处理。另一个选项是 EF 4,否则我会更喜欢它,因为它在 .NET 上下文和 Visual Studio 中得到完全支持,并且在那里有一个充满希望的 future 。
Shards 是否足够成熟?它已经停留在 3 beta 很长一段时间了,看起来像一个死项目,有人基于这个扩展部署了专业应用程序吗?它有 future 吗?或者有其他选择吗?
NHibernate 3 可以在 Mono 上运行吗?我想是的,但实际确认会很棒。如果必须将 Web 服务器开发为替代界面,那将是优于 EF 的另一个优势。
提前感谢您提供任何信息或反馈!
更新 1
显然 .NET 4 是一个问题,为了使用 NHibernate,.NET 3.5 更明智。 此外,SQLite 和 SQL CE 或框架的其他部分(如 WPF)显然存在问题。
NHibernate 是否允许跨不同的数据库类型(例如 MySQL 和 SQLite)进行分片?
所以我开始相信 EF 4 对于客户端来说更安全,而 NHibernate 在可能的 ASP.NET 接口(interface)方面则更安全。
最佳答案
分片设计(针对已知模式)将调用重定向到已知服务器,即以 a、b、c、d 开头的名称重定向到服务器 a,以 e、f、g、h 开头的名称重定向到服务器 b 等。
我还没有听说过它被用于跨数据库服务器制作。我怀疑这行得通。
分片有它的位置,但我可以想象如果不同的分片有不同的性能配置文件,可能会出现间歇性的问题,这些问题很难解决。
有此链接表明可以在单声道下运行 NH3 ... https://nhibernate.jira.com/browse/NH-2312
我倾向于使用 WCF 或 REST 通过已知的 API 抽象出远程共享数据库。
关于database - NHibernate 或 EF,Shards 还是手动分片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4526322/