国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

以文本形式將MySql數據遷移Mongodb的方法

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

Mysql數據類型

mongoimport數據類型

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導入命令需注意以下參數:

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

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

--columnsHaveTypes表示指定每個字段的數據類型,如果加了此選項,field字段后面就要加數據類型,如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中的表(集合)上沒有嚴格的結構定義,所以字段數據沒有NULL的概念,如果該字段值數據為NULL,則直接就不需要這個字段。而在mysqldump的時候,如果數據是NULL,則導出的文本文件就會出現NULL,導入后會呈現如下情況:

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

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

END

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129966.html

相關文章

  • mongodb從2.6遷移到3.0過程

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

    xorpay 評論0 收藏0
  • [原]深入對比數據科學工具箱:Python和R 非結構化數據結構化

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

    leiyi 評論0 收藏0
  • 開源|性能優化利器:數據庫審核平臺Themis選型與實踐

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

    wenhai.he 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<