1

我是数据库领域的新手,陷入了这种困惑。我正在将离线应用程序的数据库层从 sqlite 转换为 IndexedDB。目前 SQLite 中的数据库是高度相关的。此数据库上发生的太多查询是连接查询。当我开始将此数据库转换为适合 IndexedDB (NoSQL) 的数据库时,我想知道:

是否可以重新设计关系数据库布局并将其转换为属于 NoSQL 世界的设计(不需要任何连接)?换句话说,相同的数据是否可以同时建模到关系数据库和 NoSQL 数据库中。或者关系/非关系是数据的属性,数据应该决定是否需要非关系数据库或关系数据库?

4

3 回答 3

2

导致您更改后端数据库的最初要求是什么?如果性能好,请尝试使用更“强大”的 SQL 数据库引擎(MySQL、PostgresQL),您可能会获得 x30 !对于现有的复杂数据模型,NoSQL 不是一个简单的转换,如果隐含非精确匹配,甚至不是一个好的选择(除非使用评分机制,反向映射,所以“技巧”会使客户端代码有点复杂)

NoSQL 选择通常意味着您必须定义您的 noSQL 模型以适应您需要对其执行的操作。因此,您知道必须对数据执行哪些请求,并根据您希望对其完成的请求构建您的 NoSQL 模型。如果对所需请求的要求发生变化,您可能必须重新创建 NoSQL 模型以适应新请求。

SQL 选择更加灵活,允许您对现有数据进行任何操作,而对数据结构(如果有)的影响很小,因为关系足以获取请求的数据。但就原始性能而言,它不会与 NoSQL 竞争。

所以灵活性和性能之间的永恒选择!

使用 NoSQL => 性能优于灵活性 => 处理需求更改、复杂操作的复杂代码、专用客户端界面和编码的更多工作。

SQL => 性能上的灵活性 => 处理需求更改的工作更少,“规范化”(带引号)SQL 语言隐藏了大部分复杂性,“通用”客户端界面和编码。性能问题可以通过更改引擎来缓解。

于 2012-10-02T16:05:18.643 回答
1

我不知道您为什么要同时使用 SQL 和 NoSQL 建模数据库,但是是的,可以将 SQL 模式“转换”为 NoSQL。使用 NoSQL,您的应用程序通过它的模型类而不是 SQL 来定义您的架构,您在数据库中定义架构,然后围绕它构建模型。要考虑关系,您只需将其中一个字段设为多值,例如哈希图等……取决于您使用的 NoSQL 解决方案。

于 2012-10-02T15:47:10.753 回答
0

关系是一种对数据建模的方法。在关系模型下,原始数据经过称为规范化的分析过程。在规范化期间,数据被分成实体、关系和属性。见这里

标准化是一个可逆的过程。虽然总是可以做到这一点,但并不总是明智的。例如,由于冗余数据,完全非规范化可能导致数据库规模爆炸。对数据库进行查询的灵活性通常也会降低,处理时间也会增加。插入变得乏味,因为所有实体都在一张表中表示。因此,如果实体被放大,则所有实体都必须被放大。

于 2012-10-02T16:05:48.867 回答