gpt4 book ai didi

mysql - 数据库问题 : Change Simple Relational Tables to Non-Relational?

转载 作者:行者123 更新时间:2023-11-30 21:24:16 30 4
gpt4 key购买 nike

我有一个在 MySQL 数据库上运行的 Web 应用程序(正在开发中)。我正在考虑将我的应用程序迁移到 Google App Engine,并希望更好地了解如何将我的简单关系数据库模型转换为非关系方法。

我长期使用关系数据库,但我没有使用 BigTable 等基于列的数据库的经验。以防万一 Google 也支持关系数据库的小型部署,我想声明我的问题是一般性的而不是特定于 Google - 我想了解如何在非关系数据库中表示简单的关系模型。

我的数据库(简化版)如下:

Items Table
------------

ItemID ItemName ItemPriority
1 "Car" 7
2 "Table" 2
3 "Desk" 7

ItemProperties Table
---------------------

ItemID Property Importance
1 "Blue" 1
1 "Four Wheels" 2
1 "Sedan" 0
2 "Rectangular" 1
2 "One Leg" 1

我有很多项目,每个项目都有名称和 ID。每个项目都有多个属性,每个属性都有几个参数(我只说明了每个属性的名称和“重要性”,但还有更多)。我有几千万个项目,每个项目都有数百个属性。

使用场景:我收到一个 ItemName 作为输入,在 items 表中查找它的 ID,并通过该 ID 获取所有属性。然后我对属性列表(在内存中)执行一些分析,并返回结果。

90% 的工作是基于参数的查找,这(如果我理解正确的话)是非关系数据库的痛点。

推荐的方法是什么?

最佳答案

来自使用非关系数据库一段时间的人,您的两个表应该很容易转换为非关系数据库。

把这两个表变成一个对象。

项目: - ID - 姓名 - 特性 - prop1 - 支持 2

将整个内容存储在您的数据存储列(Big-Table)、文档(CouchDB)或它使用的任何其他内容中。

您可以通过任何 ID、名称或属性来查找项目。没有连接是非关系数据库的最大痛点之一。参数查找并不是真正的痛点,除非我不明白你的意思。您可能需要进行多次查找,但大多数时候这不是问题,而且它的扩展性比 rdbms 好得多。

在您的示例中,我实际上认为非关系模型更简单,更易于实现和理解。

尽管每个非关系数据存储都有不同的约定和限制,因此很难给出一般意义上的指导。例如,CouchDB 可以使用对象的 View 在对象的任何部分创建索引。使用 BigTable,您可能必须存储非规范化数据的多个副本才能获得快速索引查找。当您决定如何存储数据时,其他人会考虑不同的事情。一旦离开 SQL 世界,就会发现很多不同之处。

关于mysql - 数据库问题 : Change Simple Relational Tables to Non-Relational?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/938751/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com