database - NHibernate 或 EF,Shards 还是手动分片?

标签 database nhibernate entity-framework sharding

我想知道我的决定是否正确。我正在开发一个应用程序,允许用户混合来自本地数据库(可能是 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/

相关文章:

c# - 参数索引超出范围

c# - 使用 Fluent Nhibernate Table-Per-Subclass 策略时可以指定身份列吗?

c# - 如何将 daoFactory 注入(inject) NHibernate EventListener

C# 按实体类型自动创建存储库

c# - 我如何优化此 lambda 表达式以使用 Entity Framework 查询包含单词列表的每一行?

php - 为什么 Wordpress 创建一个巨大的 error_log 文件?

c++ - 写入 LMDB 失败

entity-framework - 使用两个 EDMX 文件(一个 dbContext,另一个常规 EDMX)时出错

sql - 重写这个子查询?

sql - 在 Oracle 11gR2 上使用 Union ALL 的大 View