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