【问题标题】:.Net Architecture challenge: The Change-prone Frankestein Model.Net 架构挑战:易变的弗兰克斯坦模型
【发布时间】:2010-04-02 17:40:08
【问题描述】:

早上好!

我们一直在为办公室里的这个有趣场景而摸不着头脑,我们很想听听您的想法和方法:

  1. 我们有一个数据库,其架构是 容易发生变化 - 让我们称之为 Prony-。 (用于存储配置参数 嵌入式设备。所以如果嵌入 设备人需要一张新桌子, 财产或关系 模型,他应该能够适应 模式以一种简单的方式发生 - 如此 经常-)。

  2. Prony 需要一个网络界面来 创建/编辑其数据(一组简单的 CRUD 就足够了)。

  3. 我们有另一个数据库包含 也需要加载的数据 这些设备,在做了一些之后 转换 - 让我们称之为 Oddy-(这个数据是由一个已经存在的 管理网络应用程序)。

  4. 我们终于有了 Tracy,这是一个与我们的数据库和嵌入式设备通信的服务器。 她应该自动适应我们的 dbs 架构更改并将数据序列化到设备。

不错的谜题,你不这么认为吗? :)


我们目前的候选人:

  • 雷迪:快速

    让我们创建一些视图 PronyOddy 进行数据转换。然后 使用 DynamicData(或一些 RAD 工具)来创建/更新一个简单的网络 Prony 的界面(这样他就可以 甚至查阅转换后的数据 来自 Prony :)。关于 Tracy,她需要重新编译 更新她的数据库架构(实体框架应该可以工作)并使用 Reflection 递归地探索架构并序列化数据.

    缺点:

    • 我们必须重新编译 TracyProny 的网络界面。

您如何看待候选人?

有什么想法吗?

【问题讨论】:

    标签: .net architecture


    【解决方案1】:

    处理产品发布后不断变化的数据模型的一种方法是在您的数据库设计中全部或部分使用EAV Database Model。 EAV 结构添加行而不是列或表,并且允许更不频繁的架构更改(或根本不更改)。

    当然,它确实有自己的一组警告,例如需要经常旋转数据,但它们是可以管理的。有很多 EAV 数据库正在生产中。

    性能说明:人们经常担心 EAV 的性能。我有许多 EAV,其中 EAV 表运行超过 1000 万条记录。读取、插入、更新和删除都很好。当您开始对这种数据结构进行大量报告时,麻烦就来了。在您的情况下,您正在存储设备的配置信息。这不是无害或微不足道的,但我会说数据库的那部分听起来像是 EAV 的绝佳候选者,因为您的读写将受到限制,而且我猜您的报告需要简单。

    【讨论】:

    • 嗨,Paul,嘿,这是个好主意,因此无需重新编译就可以更改架构:) +1
    • 完全正确。您只需要确保您的代码与持久性模型一样灵活。例如。您需要处理新实体还是只添加/修改一组已知实体的属性?
    • 嗨,Paul,在这种情况下,是的,我们还需要创建新实体。好点再次+1 :)。我正在为此考虑 Umbraco(已经是 EAV 并且也有一个不错的网络界面:)。我们只需要找到一种将 Umbraco 与外部 DBS (Oddy) 集成的方法。你怎么看?
    • Oddy 需要做数据库吗?似乎这是您放置一个提供配置 API 并从 Prony 提取数据的 Web 服务的地方?还是 Oddy 是一种在移动设备上运行的紧凑型数据库?顺便说一句,EAV 也适用于小型数据库。我只是不会尝试使用它进行 OLAP 风格的报告。
    • 您好,Paul,Oddy 已经是一个 DB,但我们可以公开一个 Web 服务 API。好主意 :) - 我们很惭愧地发现团队中有人从一开始就提出了它,我们怎么能忽略它?哈哈-。 EAV 会很好,这只是一个配置参数 db。再次感谢:) +1
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多