文档章节

Mongo非关系型数据库关系化

small达达
 small达达
发布于 2017/03/03 16:38
字数 445
阅读 15
收藏 0

Mongo接入分表策略梳理:

mongo基本信息:

 

  • 连接信息:
    • host:选填 默认 localhost
    • port:选填 默认 27017
    • username:  选填 默认 admin
    • password: 选填
  • 数据库对象关系:
    • 一个数据库连接对应多个数据库
    • 一个数据库对应多个collection
    • 一个collection对应多个document
  • 接入流程:
    1. 填写连接信息
    2. 选择数据库
    3. 选择collection,并填写相应的document模板
    4. 用户预览根据模板生成的bdp表结构schema
    5. 用户对预览表结构schema进行自定义修改
    6. 根据schema取数同步

 

 

技术要点:

抽象mongo文档的数据结构关系,假设有如下模板文档,凡出现1对多的关系则分表,使用父文档的主键(索引)作为外键依赖:

{
    "_id" : 0,
    "hometown" : "Hollywood Hills",
    "familyName" : "Partridge",
    "familyMembers" : [ 
        {
            "attributes" : [ 
                {
                    "name" : "instrument",
                    "value" : "singer"
                }, 
                {
                    "name" : "role",
                    "value" : "mom"
                }
            ],
            "age" : 42,
            "firstname" : "Shirley"
        }, 
        {
            "attributes" : [ 
                {
                    "name" : "instrument",
                    "value" : "guitar"
                }, 
                {
                    "name" : "role",
                    "value" : "son"
                }
            ],
            "age" : 18,
            "firstname" : "Keith"
        }, 
        {
            "attributes" : [ 
                {
                    "name" : "instrument",
                    "value" : "keyboard"
                }, 
                {
                    "name" : "role",
                    "value" : "sister"
                }
            ],
            "age" : 16,
            "firstname" : "Laurie"
        }
    ]
}

 

将会生成如下table列表,分为三张表Demo,Demo.familyMembers, Demo.Demo.familyMembers.attributes, 并分别与父文档通过_id或者ArrayIndex建立联系:

[
  {
    "name": "Demo",
    "collection": "Demo", 
    "uniq_keys": [
      "_id"
    ], 
    "base_path": "", 
    "columns": [
      {
        "name": "_id", 
        "path": "_id"
      }, 
      {
        "name": "hometown", 
        "path": "hometown"
      }, 
      {
        "name": "familyName", 
        "path": "familyName"
      }
    ]
  }, 
  {
    "name": "Demo.familyMembers", 
    "collection": "Demo", 
    "base_path": "familyMembers", 
    "columns": [
      {
        "name": "_id", 
        "path": "_id"
      }, 
      {
        "name": "familyMembers._index", 
        "path": "familyMembers._index"
      }, 
      {
        "name": "age", 
        "path": "familyMembers.age"
      }, 
      {
        "name": "firstname", 
        "path": "familyMembers.firstname"
      }
    ], 
    "uniq_keys": [
      "_id", 
      "familyMembers._index"
    ]
  }, 
  {
    "name": "Demo.familyMembers.attributes", 
    "collection": "Demo", 
    "base_path": "familyMembers.attributes", 
    "columns": [
      {
        "name": "_id", 
        "path": "_id"
      }, 
      {
        "name": "familyMembers._index", 
        "path": "familyMembers._index"
      }, 
      {
        "name": "familyMembers.attributes._index", 
        "path": "familyMembers.attributes._index"
      }, 
      {
        "name": "name", 
        "path": "familyMembers.attributes.name"
      }, 
      {
        "name": "value", 
        "path": "familyMembers.attributes.value"
      }
    ], 
    "uniq_keys": [
      "_id", 
      "familyMembers._index", 
      "familyMembers.attributes._index"
    ]
  }
]

3、3张表根据schema取数据如下:

Demo
**************************************************
[0, u'Hollywood Hills', u'Partridge']


Demo.familyMembers
**************************************************
[0, 0, 42, u'Shirley']
[0, 1, 18, u'Keith']
[0, 2, 16, u'Laurie']


Demo.familyMembers.attributes
**************************************************
[0, 0, 0, u'instrument', u'singer']
[0, 0, 1, u'role', u'mom']
[0, 1, 0, u'instrument', u'guitar']
[0, 1, 1, u'role', u'son']
[0, 2, 0, u'instrument', u'keyboard']
[0, 2, 1, u'role', u'sister']

 

© 著作权归作者所有

small达达
粉丝 6
博文 19
码字总数 7504
作品 0
太原
程序员
私信 提问
MongoDB学习笔记(一) MongoDB介绍及安装

一、前言 最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程,很多资料都要去查阅英文网站,效率比较低下。本人不才,借着自学的机会把心得体会都记录下来,方便感兴趣的...

李长春
2011/09/02
134
0
MongoDB学习笔记(一) MongoDB介绍及安装

MongoDB学习笔记(一) MongoDB介绍及安装 Posted on 2011-03-08 07:32 lipan 阅读(42912) 评论(28) 编辑 收藏 一、前言 最近开始学习非关系型数据库MongoDB,却在博客园上找不到比较系统的教程...

Sophia_tj
2012/09/24
123
0
mongoDB的安装使用,以及java操作

版权声明:本文为博主原创文章,欢迎大家讨论,未经博主允许不得转载. https://blog.csdn.net/u010398771/article/details/83898320 mongo作为nosql的一种,使用范围还是很广泛的,应用场景也很多...

长河
2018/11/09
0
0
为什么MongoDB适合大数据的存储?

NoSQL数据库都被贴上不同用途的标签,如MongoDB和CouchDB都是面向文档的数据库,但这并不意味着它们可以象JSON(JavaScript Object Notation,JavaScript对象标记)那样以结构化数据形式存储...

野渡书生
2016/03/11
757
0
java通过redisTemplate封装redis3.2.9工具类

前几天结合mongotemplate封装了下mongodb的工具类“http://ylcodes01.blog.51cto.com/5607366/1934662”,现在结合redistemplate封装了下常用命令工具类,个人发现二者的数据类型操作区别还是...

二进制卤蛋
2017/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

02.日志系统:一条SQL更新语句是如何执行的?

我们还是从一个表的一条更新语句说起,我们创建下面一张表: create table T(ID int primary key, c int); 如果要将ID=2这一行c的值加1,SQL可以这么写: update T set c=c+1 where ID=2; 前...

scgaopan
今天
7
0
【五分钟系列】掌握vscode调试技巧

调试前端js 准备一个前端项目 index.html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1......

aoping
今天
6
0
PhotoShop 高级应用:USM锐化/S锐化/防抖

、 高反差锐化+混合模式:叠加模式 【将更多的边缘细节添加到图像中】

东方墨天
今天
7
0
Python数据可视化之matplotlib

常用模块导入 import numpy as npimport matplotlibimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltimport matplotlib.font_manager as fmfrom mpl_toolkits.mplot3d i......

松鼠大帝
昨天
5
0
我用Bash编写了一个扫雷游戏

我在编程教学方面不是专家,但当我想更好掌握某一样东西时,会试着找出让自己乐在其中的方法。比方说,当我想在 shell 编程方面更进一步时,我决定用 Bash 编写一个扫雷游戏来加以练习。 我在...

老孟的Linux私房菜
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部