如何將SQL數(shù)據(jù)庫(kù)遷移到NoSQL
譯文【51CTO.com快譯】您知道關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)與NoSQL數(shù)據(jù)庫(kù)的本質(zhì)區(qū)別和適用場(chǎng)景嗎?
總的說來,RDBMS主要管理、存儲(chǔ)和操作的是結(jié)構(gòu)化的數(shù)據(jù)。其中,數(shù)據(jù)格式、列、數(shù)據(jù)類型、屬性和模式都是固定的。而且實(shí)體之間的關(guān)系也基本保持一致。在使用RDBMS來存儲(chǔ)事務(wù)型數(shù)據(jù)或記錄時(shí),底層數(shù)據(jù)庫(kù)除了必須保證事務(wù)的ACID(原子性、一致性、隔離性、耐久性),此外還需要重視數(shù)據(jù)的安全性和可訪問性。RDBMS的典型適用場(chǎng)景包括:財(cái)務(wù)交易記錄、OLTP、ERP、CRM系統(tǒng)、以及電子商務(wù)應(yīng)用等。而SQL是處理RDBMS時(shí)常用的查詢語言。
NoSQL(有時(shí)也稱為非SQL或非關(guān)系型)數(shù)據(jù)庫(kù)是一種適用于管理非關(guān)系型數(shù)據(jù)(即:具有固定數(shù)據(jù)類型格式和變量,但不以表格格式來結(jié)構(gòu)化數(shù)據(jù))的數(shù)據(jù)庫(kù)。NoSQL數(shù)據(jù)庫(kù)有著諸如:鍵-值、基于文檔、基于列和基于圖等多種類型。NoSQL比較適合那些非結(jié)構(gòu)化數(shù)據(jù)具備可擴(kuò)展性,以及卓越性能的場(chǎng)景。
近年來,隨著技術(shù)的發(fā)展,雖然一些圖形數(shù)據(jù)庫(kù)也提供了事務(wù)在存儲(chǔ)時(shí)需要遵循的ACID屬性,但是它們?nèi)蕴幱谠缙谟写倪M(jìn)的階段。NoSQL的典型數(shù)據(jù)是各種數(shù)據(jù)流、文檔、聊天消息、以及大數(shù)據(jù)等。它們往往來自諸如內(nèi)容管理、個(gè)性化Web搜索引擎、機(jī)器學(xué)習(xí)、物聯(lián)網(wǎng)邊緣設(shè)備、以及存儲(chǔ)了來自異構(gòu)源的大型用戶配置文件。
在此,我們首先對(duì)兩種數(shù)據(jù)庫(kù)的特征進(jìn)行如下對(duì)比和總結(jié):
隨著業(yè)務(wù)的發(fā)展和各類需求的出現(xiàn),許多企業(yè)需要將現(xiàn)有的RDBMS數(shù)據(jù)庫(kù)遷移到NoSQL,以實(shí)現(xiàn)業(yè)務(wù)的可擴(kuò)展性和性能的動(dòng)態(tài)調(diào)整。從上面的對(duì)比表格,我們可以看出,從RDBMS數(shù)據(jù)源遷移到NoSQL數(shù)據(jù)庫(kù)的優(yōu)勢(shì)主要體現(xiàn)在:成本、收益、性能、可擴(kuò)展性、變更、減少手動(dòng)轉(zhuǎn)換的工作量、以及對(duì)于分析的廣泛支持等方面。
目前,Apache Cassandra和MongoDB是被使用最為廣泛的NoSQL數(shù)據(jù)庫(kù)。Atlas則是由MongoDB提供的DBaaS(數(shù)據(jù)庫(kù)即服務(wù))。不過,目前支持將RDBMS遷移到MongoDB或Cassandra的工具并不多。當(dāng)然,我們也可以使用ETL工具或自定義的轉(zhuǎn)換引擎,來實(shí)現(xiàn)此類復(fù)雜的遷移。
此外,由云服務(wù)提供商提供的專有數(shù)據(jù)庫(kù)有:Azure Cosmos DB、AWS DynamoDB、以及Google Cloud Spanner。這些云服務(wù)提供商往往能夠提供完善的架構(gòu)、廣泛的支持能力、文檔和數(shù)據(jù)遷移工具。因此,與Cassandra或MongoDB相比,花費(fèi)在建立和遷移到新的DynamoDB或Cosmos DB實(shí)例上所需的工作量會(huì)更少。當(dāng)然,與Google相比,Azure和AWS NoSQL服務(wù)要更受業(yè)界的歡迎。
下面,我們來討論如何使用云服務(wù)提供商所提供的各種工具選項(xiàng),將RDBMS遷移或轉(zhuǎn)換為NoSQL數(shù)據(jù)庫(kù)。
1.從傳統(tǒng)RDBMS DB到AWS DynamoDB的遷移工具
AWS Database Migration Service(AWS DMS,https://aws.amazon.com/dms)可以將數(shù)據(jù)從各種被廣泛使用的商業(yè)化RDBMS、和開源的數(shù)據(jù)庫(kù),遷移到相似的同類數(shù)據(jù)庫(kù),或異構(gòu)的數(shù)據(jù)庫(kù)平臺(tái),以及AWS(RDS)的DBaaS平臺(tái)上。
AWS Schema Conversion Tool(SCT)的對(duì)象映射功能,可以被用于在遷移的過程中,將原始數(shù)據(jù)重組為目標(biāo)DynamoDB所需的數(shù)據(jù)結(jié)構(gòu)。而對(duì)于復(fù)雜的轉(zhuǎn)換,我們可以使用Lambda函數(shù)。當(dāng)然,業(yè)界也有許多開源的工具,可以將數(shù)據(jù)庫(kù)表先轉(zhuǎn)換為JSON對(duì)象,然后再將這些JSON對(duì)象導(dǎo)入NoSQL數(shù)據(jù)庫(kù)。
下面是一些具體遷移操作的實(shí)用鏈接:
- 從RDBMS到DynamoDB - https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.DynamoDB.html
- 從Oracle到DynamoDB - https://aws.amazon.com/blogs/database/aws-database-migration-service-and-amazon-dynamodb-what-you-need-to-know/
- 從Cassandra到DynamoDB - https://aws.amazon.com/blogs/database/migrate-apache-cassandra-databases-to-amazon-dynamodb-more-easily/
- 從MongoDB到DynamoDB - https://aws.amazon.com/blogs/database/performing-a-live-migration-from-a-mongodb-cluster-to-amazon-dynamodb/
2.從RDBMS DB到Azure Cosmos DB的遷移工具
Azure Cosmos DB仿真器和Azure Cosmos DB Data Migration工具,可以將CSV或JSON對(duì)象等格式的源數(shù)據(jù),從MSSQL數(shù)據(jù)庫(kù)遷移到Cosmos DB中。
Azure Database Migration Service(DMS)、Cosmos DB和MongoDB的API,可被用于將MongoDB遷移到Cosmos DB。
Azure DMS、Cosmos DB、Cassandra API、以及cqlsh命令實(shí)用程序,可被用于將Cassandra遷移到Cosmos DB。
而為了從MSSQL以外的其他RDBMS中進(jìn)行轉(zhuǎn)換,Microsoft建議用戶使用諸如Blitzz.io等第三方工具。
Azure DMS、Azure SQL Server Migration Assistant(SSMA)和Ora2Pg,也可以被用于在關(guān)系型RDBMS,與MSSQL或Azure的DBaaS平臺(tái)之間,進(jìn)行同質(zhì)和異構(gòu)的遷移。
當(dāng)然,用戶在使用上述工具進(jìn)行遷移之前,都需要事先具有Azure的Cosmos DB訂閱帳戶。
下面是一些具體遷移操作的實(shí)用鏈接:
- 從MS SQL到Cosmos DB - https://docs.microsoft.com/en-us/azure/cosmos-db/import-data
- 從Oracle到Cosmos DB - https://docs.microsoft.com/en-us/azure/cosmos-db/oracle-migrate-cosmos-db-blitzz
- 從MongoDB到Cosmos DB - https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-introduction
- 從Cassandra到Cosmos DB - https://datamigration.microsoft.com/scenario/cassandra-to-cosmos?step=1#migrating-from-cassandra
3.從SQL遷移到Google DataStore
Google提供的NoSQL服務(wù)包括Cloud Datastore和Bigtable。其中,Cloud Datastore已被更新升級(jí)為Firestore的服務(wù)。
針對(duì)從RDBMS數(shù)據(jù)庫(kù)或其他NoSQL平臺(tái),遷移到Firestore或Bigtable,Google并沒有太多現(xiàn)成的工具和文檔支持。我們只能依靠由Google托管的RDBMS Cloud SQL的內(nèi)置功能,將各種傳統(tǒng)的RDBMS遷移到Cloud SQL。而前文提到的另一個(gè)托管式RDBMS--Cloud Spanner,則需要通過手動(dòng)操作來實(shí)現(xiàn)遷移。
有關(guān)Google的遷移操作,請(qǐng)參考鏈接--https://cloud.google.com/solutions/database-migration/technical-resources/
小結(jié)
如今,除了直接從SQL數(shù)據(jù)遷移到NoSQL數(shù)據(jù)庫(kù),許多組織也正在將傳統(tǒng)的大型數(shù)據(jù)存儲(chǔ),遷移到由文件存儲(chǔ)、NoSQL數(shù)據(jù)庫(kù)和SQL數(shù)據(jù)庫(kù)組成的數(shù)據(jù)湖模式中,進(jìn)而方便開展存儲(chǔ)挖掘和大數(shù)據(jù)分析。
綜上所述,關(guān)系型數(shù)據(jù)庫(kù)和NoSQL數(shù)據(jù)庫(kù)分別適用于不同類型的作業(yè)和存儲(chǔ)需求。在進(jìn)行數(shù)據(jù)庫(kù)的設(shè)計(jì)時(shí),架構(gòu)師必須考慮成本因素、高可用性(HA)設(shè)計(jì)、災(zāi)難恢復(fù)(DR)機(jī)制、以及數(shù)據(jù)存儲(chǔ)和檢索的復(fù)雜性。如果您想進(jìn)一步了解此方面的知識(shí),請(qǐng)參閱如下兩個(gè)鏈接:
- NoSQL與關(guān)系型數(shù)據(jù)庫(kù),該何時(shí)用、怎么用? - https://dzone.com/articles/nosql-vs-relational-databases-when-to-use-what
- 數(shù)據(jù)庫(kù)遷移的挑戰(zhàn) - https://dzone.com/articles/database-migration-challenges
原文標(biāo)題:SQL vs NoSQL and SQL to NoSQL Migration,作者:Sandeep Tol
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】