Mysql 数据库问题:将简单关系表更改为非关系表?
我有一个在MySQL数据库上运行的web应用程序(正在开发中)。我正在考虑将我的应用程序迁移到GoogleAppEngine,并希望更好地理解如何将我的简单关系数据库模型转换为非关系方法 我是一个长期使用关系数据库的人,我没有使用基于列的数据库(如BigTable)的经验。为了防止Google也支持关系数据库的小型部署,我想声明我的问题是一般性的,而不是特定于Google的——我想了解简单的关系模型如何在非关系数据库中表示 我的数据库(简化)如下:Mysql 数据库问题:将简单关系表更改为非关系表?,mysql,database,database-design,rdbms,non-relational-database,Mysql,Database,Database Design,Rdbms,Non Relational Database,我有一个在MySQL数据库上运行的web应用程序(正在开发中)。我正在考虑将我的应用程序迁移到GoogleAppEngine,并希望更好地理解如何将我的简单关系数据库模型转换为非关系方法 我是一个长期使用关系数据库的人,我没有使用基于列的数据库(如BigTable)的经验。为了防止Google也支持关系数据库的小型部署,我想声明我的问题是一般性的,而不是特定于Google的——我想了解简单的关系模型如何在非关系数据库中表示 我的数据库(简化)如下: Items Table -----------
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%的工作是基于参数的查找,这(如果我理解正确的话)是非关系数据库的难点
推荐的方法是什么?GQL不支持联接。您可以通过两种方式解决此问题:
- 请加入你自己
- 使用Expando模型
在Expando模型中,可以在运行时创建新字段。它们不会被编入索引,所以如果您想搜索它们,可能会比较慢,但简单地获取它们就可以了。您也可以使用复杂类型,如ListProperty。有了这种灵活性,您可以考虑将ItemProperties表中的所有内容放入Items表中,并为自己保存一个查询。要有创意。GQL不支持联接。您可以通过两种方式解决此问题:
- 请加入你自己
- 使用Expando模型
在Expando模型中,可以在运行时创建新字段。它们不会被编入索引,所以如果您想搜索它们,可能会比较慢,但简单地获取它们就可以了。您也可以使用复杂类型,如ListProperty。有了这种灵活性,您可以考虑将ItemProperties表中的所有内容放入Items表中,并为自己保存一个查询。要有创意。我有一个非常相似的数据库结构(我们的“记录”和“记录条目”表反映了您的“项目”和“项目属性”),我正在考虑类似的迁移到非关系数据库。我们可能会去CouchDB或memcachedb之类的网站,而不是谷歌 像你一样,我没有使用非关系数据库的经验(我的开发人员也没有)。然而,我们提出了一些想法。我们目前的想法是(使用您的模式):
- 首先:将每个项及其项属性折叠为一个带有字段的对象(本质上是一个XML文档),并将其填充到由标识符键入的数据库中。每次检索项目时,您也会返回所有itemProperties李>
- 第二:我们正在列出上面的模型不支持的所有“关系”操作。这包括两个“分组”操作,其中我们根据项表中的特殊字段查询项,以及一个查询,其中我们尝试检测最近修改的所有项(以前通过查询项表中的日期列来完成)。我们正在为每种情况发明替代实现(幸运的是,只有少数几种)
PS:我推断您的属性表必须有数十亿行。您运行MySQL服务器的具体数量和硬件是什么?MySQL是否存在可伸缩性问题?我有一个非常相似的数据库结构(我们的“records”和“recordEntries”表反映了您的“items”和“itemProperties”),我正在考虑类似的迁移到非关系数据库。我们可能会去CouchDB或memcachedb之类的网站,而不是谷歌 像你一样,我没有使用非关系数据库的经验(我的开发人员也没有)。然而,我们提出了一些想法。我们目前的想法是(使用您的模式):
- 首先:将每个项及其项属性折叠为一个带有字段的对象(本质上是一个XML文档),并将其填充到由标识符键入的数据库中。每次检索项目时,您也会返回所有itemProperties李>