14

我刚刚开始了一份新工作,我将不得不使用多值数据库 (UniVerse) 做大量工作。我在关系数据库(SqlServer)方面的数据库经验很少,我正在寻找一些关于 MVD 与关系数据库的优缺点比较的公正信息。

办公室里的每个人要么来自关系数据库背景(并且讨厌 UniVerse),要么已经在这里工作多年并且喜欢它。

4

5 回答 5

12

首先,免责声明。我与 UniData(UniVerse 的姊妹数据库)合作,偶尔会在上面写博客,所以我不能声称自己完全没有偏见;不过,我会尝试。

以下是供您考虑的一些要点:

  • SQL DB 和 Multivalue DB 之间的一个很大区别是 MVDB 不遵守1NF。这有利也有弊。它可能(并且通常被)滥用,但有时它可能非常实用。最大的好处是它意味着您并不总是需要一个可以使某些查询更快的连接表。

  • 与常规 SQL DB 相比,它以一种全新的方式存储元数据。每个文件/表都没有具体的模式。相反,它有 1 个或多个“字典”文件,这些文件由告诉您如何解释数据的记录组成。这不仅允许您存储数据的多种解释(原始/大写/小写、组合字段等),还允许您执行等效的枚举和连接。如果做得好,它会非常强大

  • 遗憾的是,虽然这个概念有很大的潜力,但缺乏 DBMS 的工具集。开发是由极少数的业务案例驱动的,这些案例似乎是由基于它的现有和老化的软件系统的“保持亮灯”心态驱动的。尽管它具有集成工具(例如 .NET 连接器、用于 SQL 查询的 ODBC 接口等),但它们确实存在问题。例如,UniObjects .NET 接口在安全性方面缺乏任何细化(基本上全有或全无)。

  • 它不仅仅是一个 DBMS,而且本质上是一个完整的应用程序平台。尽管 UniBasic 不如基于 .NET 的语言那么强大,但它确实胜过 T-SQL 并且在抽出业务规则方面具有快速周转能力。

于 2010-12-21T09:26:19.473 回答
5

正如 Dave 所建议的,当您知道要检索的记录的键时,MV 数据库确实设计得最好。有些人将它们称为基于记录的数据库系统,而不是 SQL,后者是基于集合的数据库系统。

这实际上取决于您要做什么,需要如何构建数据以及您可以使用哪些其他工具。我大部分时间都在 MV(主要是 Revelation 产品)上工作,我们经常处理超过 10,000,000 的记录集,而且速度还不错。

MV 数据库的优势在于数据是流动的。我们发现我们的大多数客户将其用于法律、医疗和金融产品等应用;关系复杂并且随着时间的推移会迅速而剧烈地变化的应用程序。

你可能想看看 no SQL 运动,它有很多相同的概念,尽管 MV 和 no SQL 真的不是一回事。

MV 的主要缺点不在于它的结构,而在于它的工具。您通常会发现,由于开发人员基础较小,因此可用的工具包和帮助也较小。您可能还会发现大多数产品为您提供的嵌入式基本语言缺少您习惯的对象样式编码。有时甚至 JavaScript 似乎也具有更多的功能作为一种语言。

话虽如此,由于 MV 数据库主要是巨型字符串,因此语言的字符串处理非常出色。它们非常适合直接操作 HTML 和 XML 字符串。

我想我有一个大问题,你有具体的问题吗?我不会开战说这就像从 Windows 迁移到 Linux 或 Mac,甚至从 Debian 迁移到 Red Hat,但结构和系统不同,因此它们具有不同的概念、优势、局限性和目的. 如果您尝试处理像 SQL 这样的 MV 数据库(您可以),您会发现它不是最合适的。设计不佳的 MV 数据库可能会令人沮丧。一个设计良好的 MV 数据库可以是一件美丽的事情。

于 2011-11-13T13:09:02.503 回答
3

MV 数据库以从相对低功率的服务器中榨取出色的性能而闻名。

他们使用链接哈希归档系统,该系统将大多数文件访问操作简化为数学运算,并且在记录密钥已知时进行单个磁盘读取。在正确配置的系统中,只要记录键已知,从具有 1,000,000,000 条记录的文件中读取所需的时间不会比从具有 1,000 条记录的文件中读取的时间长。

记录密钥需要是唯一的,并且在可以通过算法或程序确定记录密钥的方式设置记录密钥的应用程序中,数据库访问所涉及的开销可以最小化。但是,当然,这通常涉及以可能不被认为是“关系”的方式访问数据库。

于 2011-11-13T00:27:24.517 回答
1

没有优点和缺点 - 他们只是简单地使用不同的方法来存储值。UniVerse 使用分隔符来分隔值(IIRC 它使用 char(254) 和 char(253) 来分割字段中的多个值,使用 char(255) 来分隔数据文件中的实际记录。我可能错了虽然 - 自从我上次使用它已经 10 多年了)。有些人喜欢这种存储数据的方法,就像有些人仍然更喜欢老式汽车而不是最新款的汽车,或者有些人更喜欢使用马车而不是现代汽车。(当然这只是我的看法)。

在一个字段中存储多个值意味着您没有 SQLServer 将使用的额外表,您实际上具有一定程度的非规范化。如果使用 UniVerse 自带的技术(我们曾经使用称为 CueBIC 的窗口系统),那么使用这些多值非常简单,但是当从 C++ 或 VB 等其他语言连接到数据库时,它就变成了 PITA - 你然后必须自己阅读记录并分离出值。这意味着搜索这些多值也很困难。

但是话又说回来,也许自从我上次使用它以来事情已经发生了变化,也许有人编写了一个不错的驱动程序,因此您可以轻松地从 .Net 平台与 UniVerse 交互。我希望他们有你的缘故。

于 2010-11-18T22:22:56.307 回答
0

缩放到文件中的大量项目(记录)效果很好。缩放到记录中的大量值或子值会产生性能问题。应用程序设计需要对低于数千个阈值的限制值和子值列表敏感。

字符串处理非常好。整数处理也是如此。MV Basic 语言是松散类型的,所以不要期望编译器有太多的强制执行。也就是说,由于 MV Basic 源项目就像任何其他数据一样,编译器只是 DB 环境中的另一个动词,因此编写代码生成器和预编译器是轻而易举的事。这是在应用程序下方构建工具层的良好环境。

于 2016-01-28T21:54:09.570 回答