C# 数据处理设计模式:通过 ORM 存储在 DB 中的对象,直接与数据库一起工作?
Posted
技术标签:
【中文标题】C# 数据处理设计模式:通过 ORM 存储在 DB 中的对象,直接与数据库一起工作?【英文标题】:C# Data handling design pattern: Objects stored in DB via ORM, work directly with the database? 【发布时间】:2012-03-12 10:26:18 【问题描述】:考虑一个存储商店库存的应用程序,其中包含数百种商品类型和每种商品的数量。我目前有一个可以处理这个问题的数据库,由于程序编程的背景,这是很自然的设计。但是,我现在使用 OOP 语言 (C#),我正在考虑将库存和其他实体(分支机构、员工、供应商)存储为 CLR 对象,分组在 ObservableCollections 中,然后通过 ORM 持久化到数据库,例如NHibernate。
我担心的是,ObservableCollections 始终在内存中包含数百或数千个项目将成为资源和性能障碍。考虑到设备故障或停电,我还担心潜在的数据丢失。由于系统将记录金融交易(销售),因此数据库的可靠性非常重要。具体来说,在交易时数据库中的所有更改/销售对我来说很重要,而不是 ORM 持久化的时候。
我应该直接使用数据库,还是应该使用对象并让 ORM 处理存储?
【问题讨论】:
【参考方案1】:我担心的是 ObservableCollections 在内存中有数百或数千个项目 任何时候都将成为资源和性能障碍
取决于您如何使用 htem。
我有一项服务通过字符串键在内存中保存大约 25 万个项目。我每秒最多对它们进行大约 50.000 次更新,然后将 udpate 传输到数据库 - 不是作为更新,而是作为带有时间戳的新数据(跟踪随时间的变化)。
这真的取决于。
一般来说,这不是一个简单的问题 - 大多数时候执行 SQL 查询更容易,但内存缓存确实可以提高性能。是的,它使用内存。谁在乎 - 现在的作品可以有 64gb 的内存。问题是从表演中是否有意义。
具体来说,在交易时数据库中的所有更改/销售,而不是 每当 ORM 持续存在对我来说很重要。
逻辑错误。 ORM 会将它们作为 ORM 事务的一部分持久化。自然,缓存不会是“一个 ORM 事务”,而是独立于更新的事务。如果没有一个 ORM 进入你的方式,它要么是世界上最糟糕的 ORM,要么你的应用程序架构被破坏了。
财务数据的所有更新都应该发生在数据库级别的事务中,并且我所知道的每个 ORM 都支持这一点。
我应该直接使用数据库,还是应该使用对象并让 ORM 处理 存储?
取决于要求。我喜欢 ORM,但最近转向了面向服务的架构,在该架构中我更新了 moemry 表示然后将事务流式传输到数据库。但是然后我做流数据输入/逻辑东西没有决定(数据来自外部源并且必须处理,不可能出错,不可能丢失 - 如果 soemthign 对我造成打击,应用程序的下一次启动会得到相同的结果数据,直到我说我处理了它)。
【讨论】:
谢谢,汤姆汤姆。我决定放弃 ORM,因为我希望数据的核心在数据库中,而不是在对象中。非常感谢您的分析,非常有帮助。以上是关于C# 数据处理设计模式:通过 ORM 存储在 DB 中的对象,直接与数据库一起工作?的主要内容,如果未能解决你的问题,请参考以下文章