成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

以文本形式將MySql數(shù)據(jù)遷移Mongodb的方法

IT那活兒 / 3101人閱讀
以文本形式將MySql數(shù)據(jù)遷移Mongodb的方法
數(shù)據(jù)遷移是DBA的一類常見工作,如果是相同數(shù)據(jù)庫產(chǎn)品之間的數(shù)據(jù)遷移,因?yàn)楦鱾€(gè)DBMS都提供了遷移的工具,所以是一個(gè)比較簡單的事情。但是現(xiàn)在各種開源數(shù)據(jù)庫產(chǎn)品大行其道,也經(jīng)常出現(xiàn)跨DBMS的數(shù)據(jù)遷移需求,此時(shí)就得想各種方法來實(shí)現(xiàn),跨庫遷移最常見的就是ETL工具或者以文本的形式導(dǎo)出和導(dǎo)入。
?
在本文中,筆者將簡單介紹MySql數(shù)據(jù)庫以文本的形式導(dǎo)出導(dǎo)入到Mongodb的方法。MySql數(shù)據(jù)庫是一種關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)在表中是以行列的形式存儲(chǔ),而Mongodb是一種非關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)是以Json文檔的形式存儲(chǔ)。兩種數(shù)據(jù)庫都提供了導(dǎo)入導(dǎo)出文本的工具,都支持CSV、TSV等格式的導(dǎo)入導(dǎo)出,Mysql是mysqldump,mongodb導(dǎo)入使用mongoimport,所以整個(gè)過程也比較簡單,只是有些細(xì)節(jié)需要注意。
使用mysqldump導(dǎo)出CSV或者TSV格式,比較常見,此時(shí)暫不做討論,由于Mongodb數(shù)據(jù)是以Json文檔來存儲(chǔ),在表級(jí)并沒有表結(jié)構(gòu)定義的概念,但是每個(gè)Json文檔的字段都有類型,且同為文本類型,字段長度也不一致,時(shí)間類型也不同,在Mongodb中是ISODate,所以使用mongoimport導(dǎo)入時(shí),需指定每個(gè)字段的類型。所以可以按照下表進(jìn)行Mysql和Mongodb之間的字段類型轉(zhuǎn)換導(dǎo)入:
序號(hào)

Mysql數(shù)據(jù)類型

mongoimport數(shù)據(jù)類型

1

tinyint

int32()

2

smallint

int32()

3

mediumint

int32()

4

integer

int32()

5

bigint

int64()

6

decimal

decimal()

7

float

double()

8

double

double()

9

char

string()

10

varchar

string()

11

tinytext

string()

12

text

string()

13

mediumtext

string()

14

longtext

string()

15

year

string()

16

date

date_oracle(YYYY-MM-DD)

17

time

string()

18

datetime

date_oracle(YYYY-MM-DD HH24:MI:SS)

19

timestamp

date_oracle(YYYY-MM-DD HH24:MI:SS)

20

bit

int32()

mongoimport導(dǎo)入命令需注意以下參數(shù):

--type 指定導(dǎo)入文件的類型,可選值有CSV、TSV、JSON

--fields指定Json文檔的字段名

--columnsHaveTypes表示指定每個(gè)字段的數(shù)據(jù)類型,如果加了此選項(xiàng),field字段后面就要加數(shù)據(jù)類型,如msisdn.string()

命令示例:

mongoimport--db ring***ne_prod --collection=Di***bt --parseGrace=skipField--fields="ms**dn.string(),r***ame.string(),nic**me.string(),co***ntId.string(),cop***tId.string(),fil***pe.string(),dat***atus.string(),localF***Path.string(),diyTran*****nId.string(),diyFtp***ath.string(),diyFile***at.string(),cre***me.date_oracle(YYYY-MM-DDHH24:MI:SS),lastM****ime.date_oracle(YYYY-MM-DDHH24:MI:SS),sta***e.string(),e***ime.string(),he***Str.string(),dep***onId.string(),act***Id.string(),l***el.string()"--type tsv --file=t_m****bt_info.tsv --numInsertionWorkers=100--columnsHaveTypes

在上面也說過,在Mongodb中的表(集合)上沒有嚴(yán)格的結(jié)構(gòu)定義,所以字段數(shù)據(jù)沒有NULL的概念,如果該字段值數(shù)據(jù)為NULL,則直接就不需要這個(gè)字段。而在mysqldump的時(shí)候,如果數(shù)據(jù)是NULL,則導(dǎo)出的文本文件就會(huì)出現(xiàn)NULL,導(dǎo)入后會(huì)呈現(xiàn)如下情況:

此時(shí),建議導(dǎo)出的時(shí)候使用selectifnull(column_name,’’)****intooutfile的形式進(jìn)行導(dǎo)出;在使用mongoimport導(dǎo)入是指定參數(shù)--ignoreBlanks,這樣導(dǎo)入的json文檔就不會(huì)存在null的字段。如果大批量的表數(shù)據(jù)遷移,則使用selectinto outfile比較麻煩,可以考慮使用shell腳本對(duì)原始文本文件進(jìn)行全量的Null替換,然后再導(dǎo)入。

另外在生產(chǎn)中,Mysql數(shù)據(jù)中可能存在以字符串形式保存的Json文檔,在Mongodb中,這種Json文檔建議以子文檔的形式存儲(chǔ)入數(shù)據(jù)庫中,此時(shí)使用mongoimport就不能滿足需求,此時(shí)可以考慮使用python對(duì)文本數(shù)據(jù)進(jìn)行轉(zhuǎn)換后寫入mongodb。

END

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129966.html

相關(guān)文章

  • mongodb從2.6遷移到3.0過程

    摘要:數(shù)據(jù)的遷移由于需要換引擎,所以原來的數(shù)據(jù)不能直接使用了,必須使用和兩個(gè)工具來遷移數(shù)據(jù)。指定一個(gè)時(shí)間限制以毫秒為單位。以上是新版本用戶角色權(quán)限的一些說明。到這里,單實(shí)例的從遷移到就基本完成了。 首發(fā)于 搞起博客 總共有這么幾個(gè)問題需要解決: 1. mongodb3.0版本的二進(jìn)制包 1. wiredTiger引擎的配置 1. 數(shù)據(jù)的遷移 1. 權(quán)限 mongodb3.0的二進(jìn)...

    xorpay 評(píng)論0 收藏0
  • [原]深入對(duì)比數(shù)據(jù)科學(xué)工具箱:Python和R 非結(jié)構(gòu)化數(shù)據(jù)結(jié)構(gòu)化

    摘要:則在讀取數(shù)據(jù)時(shí)將兩個(gè)中文字段混淆成了一個(gè)字段,導(dǎo)致整個(gè)數(shù)據(jù)結(jié)構(gòu)錯(cuò)亂。三條路子全軍覆沒,這讓我情何以堪,好在使用的經(jīng)驗(yàn)頗豐,通過中文的轉(zhuǎn)換和切割就輕松解決了這個(gè)問題。 概述 showImg(https://segmentfault.com/img/bVylLL); 在現(xiàn)實(shí)場景中,由于數(shù)據(jù)來源的異構(gòu),數(shù)據(jù)源的格式往往是難以統(tǒng)一的,這就導(dǎo)致大量具有價(jià)值的數(shù)據(jù)通常是以非結(jié)構(gòu)化的形式聚合在一起的...

    leiyi 評(píng)論0 收藏0
  • 開源|性能優(yōu)化利器:數(shù)據(jù)庫審核平臺(tái)Themis選型與實(shí)踐

    摘要:正是存在問題,促使我們考慮引入數(shù)據(jù)庫審核平臺(tái)。的確,與很多互聯(lián)網(wǎng)公司相比,數(shù)據(jù)庫數(shù)十套的估摸并不是太大但與互聯(lián)網(wǎng)類公司不同,類似宜信這類金融類公司對(duì)數(shù)據(jù)庫的依賴性更大,大量的應(yīng)用是重?cái)?shù)據(jù)庫類的,且其使用復(fù)雜程度也遠(yuǎn)比互聯(lián)網(wǎng)類的復(fù)雜。 作者:韓鋒 出處:DBAplus社群分享 Themis開源地址:https://github.com/CreditEaseDBA 拓展閱讀:宜信開源|數(shù)...

    wenhai.he 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<