亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

IT那活兒 / 3500人閱讀
以文本形式將MySql數(shù)據(jù)遷移Mongodb的方法

點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!

數(shù)據(jù)遷移是DBA的一類(lèi)常見(jiàn)工作,如果是相同數(shù)據(jù)庫(kù)產(chǎn)品之間的數(shù)據(jù)遷移,因?yàn)楦鱾€(gè)DBMS都提供了遷移的工具,所以是一個(gè)比較簡(jiǎn)單的事情。但是現(xiàn)在各種開(kāi)源數(shù)據(jù)庫(kù)產(chǎn)品大行其道,也經(jīng)常出現(xiàn)跨DBMS的數(shù)據(jù)遷移需求,此時(shí)就得想各種方法來(lái)實(shí)現(xiàn),跨庫(kù)遷移最常見(jiàn)的就是ETL工具或者以文本的形式導(dǎo)出和導(dǎo)入。
在本文中,筆者將簡(jiǎn)單介紹MySql數(shù)據(jù)庫(kù)以文本的形式導(dǎo)出導(dǎo)入到Mongodb的方法。MySql數(shù)據(jù)庫(kù)是一種關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)在表中是以行列的形式存儲(chǔ),而Mongodb是一種非關(guān)系型數(shù)據(jù)庫(kù),數(shù)據(jù)是以Json文檔的形式存儲(chǔ)。
兩種數(shù)據(jù)庫(kù)都提供了導(dǎo)入導(dǎo)出文本的工具,都支持CSV、TSV等格式的導(dǎo)入導(dǎo)出,Mysql是mysqldump,mongodb導(dǎo)入使用mongoimport,所以整個(gè)過(guò)程也比較簡(jiǎn)單,只是有些細(xì)節(jié)需要注意。
使用mysqldump導(dǎo)出CSV或者TSV格式,比較常見(jiàn),此時(shí)暫不做討論,由于Mongodb數(shù)據(jù)是以Json文檔來(lái)存儲(chǔ),在表級(jí)并沒(méi)有表結(jié)構(gòu)定義的概念,但是每個(gè)Json文檔的字段都有類(lèi)型,且同為文本類(lèi)型,字段長(zhǎng)度也不一致,時(shí)間類(lèi)型也不同,在Mongodb中是ISODate,所以使用mongoimport導(dǎo)入時(shí),需指定每個(gè)字段的類(lèi)型。所以可以按照下表進(jìn)行Mysql和Mongodb之間的字段類(lèi)型轉(zhuǎn)換導(dǎo)入
序號(hào)
Mysql數(shù)據(jù)類(lèi)型
mongoimport數(shù)據(jù)類(lèi)型
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)入文件的類(lèi)型,可選值有CSV、TSV、JSON.
  • fields指定Json文檔的字段名.
  • columnsHaveTypes表示指定每個(gè)字段的數(shù)據(jù)類(lèi)型,如果加了此選項(xiàng),field字段后面就要加數(shù)據(jù)類(lèi)型,如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.str
ing(),dep***onId.string(),act***Id.string(),l***el.string()"
--type tsv --file=t_m****bt_info.tsv --
numInsertionWorkers=100--columnsHaveTypes
在上面也說(shuō)過(guò),在Mongodb中的表(集合)上沒(méi)有嚴(yán)格的結(jié)構(gòu)定義,所以字段數(shù)據(jù)沒(méi)有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ù)庫(kù)中,此時(shí)使用mongoimport就不能滿(mǎn)足需求,此時(shí)可以考慮使用python對(duì)文本數(shù)據(jù)進(jìn)行轉(zhuǎn)換后寫(xiě)入mongodb。



本文作者:劉運(yùn)彬(上海新炬王翦團(tuán)隊(duì))

本文來(lái)源:“IT那活兒”公眾號(hào)

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

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

相關(guān)文章

  • Mongodb升級(jí)方案概述

    Mongodb升級(jí)方案概述 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margi...

    IT那活兒 評(píng)論0 收藏365
  • mongodb從2.6遷移到3.0過(guò)程

    摘要:數(shù)據(jù)的遷移由于需要換引擎,所以原來(lái)的數(shù)據(jù)不能直接使用了,必須使用和兩個(gè)工具來(lái)遷移數(shù)據(jù)。指定一個(gè)時(shí)間限制以毫秒為單位。以上是新版本用戶(hù)角色權(quán)限的一些說(shuō)明。到這里,單實(shí)例的從遷移到就基本完成了。 首發(fā)于 搞起博客 總共有這么幾個(gè)問(wèn)題需要解決: 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ò)亂。三條路子全軍覆沒(méi),這讓我情何以堪,好在使用的經(jīng)驗(yàn)頗豐,通過(guò)中文的轉(zhuǎn)換和切割就輕松解決了這個(gè)問(wèn)題。 概述 showImg(https://segmentfault.com/img/bVylLL); 在現(xiàn)實(shí)場(chǎng)景中,由于數(shù)據(jù)來(lái)源的異構(gòu),數(shù)據(jù)源的格式往往是難以統(tǒng)一的,這就導(dǎo)致大量具有價(jià)值的數(shù)據(jù)通常是以非結(jié)構(gòu)化的形式聚合在一起的...

    leiyi 評(píng)論0 收藏0

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

0條評(píng)論

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