用于关系型数据(位置)的NoSQL文档
我有一个位置列表,目前在MySQL中它上面有一个层次结构,比如大陆>国家>县/地区/州>普罗旺斯>位置。如果我将这些位置存储在NoSQL存储中(比如CouchDB)。我是否只将大陆存储为顶级对象,其余存储为该大陆的子对象数组。然后使用map/reduce为国家、县等创建各种视图。这是此类数据的推荐结构吗?这会让每个大陆的文件都变得非常大吗用于关系型数据(位置)的NoSQL文档,nosql,couchdb,Nosql,Couchdb,我有一个位置列表,目前在MySQL中它上面有一个层次结构,比如大陆>国家>县/地区/州>普罗旺斯>位置。如果我将这些位置存储在NoSQL存储中(比如CouchDB)。我是否只将大陆存储为顶级对象,其余存储为该大陆的子对象数组。然后使用map/reduce为国家、县等创建各种视图。这是此类数据的推荐结构吗?这会让每个大陆的文件都变得非常大吗 { name: "Europe", type: "CONTINENT", countries: [ { name: "E
{
name: "Europe",
type: "CONTINENT",
countries: [
{
name: "England"
counties: [...]
}
]
}
这只是我的一个建议和猜测,但我想我可能有一个好主意。(我还强烈建议查看位置类型数据。) 如果要自己继续,可以存储每个位置,并将所有细节级别存储为属性:
{
"continent": "North America",
"country": "United States",
"state": "Texas",
"city": "Houston"
}
我来自美国,所以我使用通常用于确定位置的方法。(我注意到您使用的是普罗旺斯、郡等,可以很容易地合并到此模型中)
无论如何,视图函数应该是这样的:
function (doc) {
emit([doc.continent, doc.country, doc.state, doc.city], null);
}
此视图将输出:
{
"key": ["North America", "United States", "Texas", "Houston"],
"value": null
}
现在,我知道这是冗余数据,因为每个位置都是这样存储的。没关系,我们正在处理NoSQL,没有必要继续进行相关思考。(这就是为什么您正在寻找另一种解决方案,如CouchDB)
无论如何,您可以使用视图参数group\u level
来“深入”到您的位置。使用group_level=1
将获得按大陆分组的视图结果<代码>分组级别=2将按国家分组,分组级别=3
将按州分组,等等
使用reduce函数可以获得每个分组的计数和其他统计信息。我希望这有帮助 这只是我的一个建议和推测,但我想我可能有个好主意。(我还强烈建议查看位置类型数据。) 如果要自己继续,可以存储每个位置,并将所有细节级别存储为属性:
{
"continent": "North America",
"country": "United States",
"state": "Texas",
"city": "Houston"
}
我来自美国,所以我使用通常用于确定位置的方法。(我注意到您使用的是普罗旺斯、郡等,可以很容易地合并到此模型中)
无论如何,视图函数应该是这样的:
function (doc) {
emit([doc.continent, doc.country, doc.state, doc.city], null);
}
此视图将输出:
{
"key": ["North America", "United States", "Texas", "Houston"],
"value": null
}
现在,我知道这是冗余数据,因为每个位置都是这样存储的。没关系,我们正在处理NoSQL,没有必要继续进行相关思考。(这就是为什么您正在寻找另一种解决方案,如CouchDB)
无论如何,您可以使用视图参数group\u level
来“深入”到您的位置。使用group_level=1
将获得按大陆分组的视图结果<代码>分组级别=2将按国家分组,分组级别=3
将按州分组,等等
使用reduce函数可以获得每个分组的计数和其他统计信息。我希望这有帮助 很好,谢谢。如果可以的话,还有一个问题。如果每个区域都有关于该区域的数据呢。例如,对于英格兰,我们有一些关于冲浪区域的文本信息。理想情况下,如果我们更改文本,我们不会更新其中包含英格兰的所有文档?您可以有一个单独的文档类型,只有大陆和国家,然后您可以使用单独的视图引入该文档类型。感谢您的帮助。您的解决方案创建了某种关系结构?这不是问题,但这正是您的建议?为了实现不必要的优化,您可以将
null
替换为编号1
,这样每行可以节省5个字节。(null
编码需要7个字节,但小于256的整数只需要2个。数字1
也很好,因为您可以稍后快速添加减少:“计数”
减少并获得简单的行数。谢谢。如果可以的话,还有一个问题。如果每个地区都有关于该地区的数据,比如说英格兰,我们有一些关于该地区的文字信息用于冲浪。理想情况下,如果我们更改文字,我们不会更新其中包含英格兰的所有文档。您可以有一个单独的文档只有大陆和国家的文档类型,那么您可以使用单独的视图来引入该文档类型。感谢您的帮助。您的解决方案创建了某种关系结构?这不是问题,但这正是您的建议?为了最终实现不必要的优化,您可以使用编号替换null
r1
每行将节省5个字节。(null
需要7个字节进行编码,但小于256的整数只需要2个。数字1
也很好,因为您可以稍后快速添加减少:“计数”
减少,并轻松进行行计数。