目次
迁移的原因
迁移的过程

从 MongoDB 迁移到 PostgreSQL

Jun 07, 2016 pm 04:28 PM
mongodb postgresql

其实是上个月的事情了,花了一个星期的时间把项目的数据库从 MongoDB 迁移到PostgreSQL。这里简要地说一说迁移的原因和过程。由于项目还没有上线,涉及业务逻辑的部分不能说得太细,呵呵。 迁移的原因 过去几个月见过很多人的吐槽,主要是说它的内存使用很夸

其实是上个月的事情了,花了一个星期的时间把项目的数据库从 MongoDB 迁移到PostgreSQL。这里简要地说一说迁移的原因和过程。由于项目还没有上线,涉及业务逻辑的部分不能说得太细,呵呵。

迁移的原因

过去几个月见过很多人的吐槽,主要是说它的内存使用很夸张,在某些应用场景里性能很差,云云,虽说有点担心,但考虑到我们项目已经开发了一段时间,以及 MongoDB 对开发效率的提升,也就没打算换掉它。甚至在 Don’t use MongoDB 这篇著名的钓鱼文出现的时候,都还比较淡定。

直到我终于发现,MongoDB 不支持事务。一些新加入的功能对数据一致性的要求比较高,在某些情况下必须回滚数据,而 MongoDB 在默认情况下无法保证这一点,除非找到靠谱的 workaround,否则必须切换到 RDBMS。

我找到的各种解决方案大致可以分为两类,一是模拟事务,二是绕过它。MongoDB 官方 Cookbook 里这篇 Perform Two Phase Commits 介绍的就是如何利用额外的 collection 记录数据操作状态,来模拟事务操作。Master Detail Transactions in MongoDB和 MongoDB and E-commerce 这两篇文章则都提到了利用 MongoDB 中单个 document 操作的原子性来保证一致性的方法。

可惜这两类方案都不靠谱。第一种的方法太山寨,因为它不是在数据库级别而是在应用级别模拟了事务操作,很难保证数据安全。第二种对 model 的设计限制太多,把所有相关 model都 embed 进一个 model 不太现实。综合来看,MongoDB 无法胜任。

另外我在 Stack Overflow 上的问答 Are there any e-commerce websites that use NoSQL databases 里看到的答案也认为这种情况下用 RDBMS 比 NoSQL 方案要靠谱。摘录答案如下:

The overhead that makes RDBMS’s so slow, is guaranteeing atomicity, consistency, isolation, durability, also known as ACID. Some of these properties are pretty critical for applications that deal with money. You don’t want to lose a single order when the lights go out.

NoSQL databases usually sacrifice some or all of the ACID properties in return for severely reduced overhead. For many applications, this is fine – if a few “diggs” go missing when the lights go out, it’s no big deal.

For an ecommerce site, you need to ask yourself what you really need. Do you really need a level of performance that a RDBMS can’t deliver? Do you need the reliability that an RDBMS provides? Unless you’re dealing with traffic levels comparable to Amazon.com’s, an RDBMs, even on modest hardware will probably satisfy your performance needs just fine, especially if you limit yourself to simple queries, and index properly.

做完这个调查之后,终于下定决心要迁移。

迁移的过程

  1. 消灭 Rails 配置文件中跟 Mongoid 有关的所有内容,换回 ActiveRecord. 这时项目是无法正常启动的。

  2. 补写所有 model 的 migration. 我先跳过 model 中与 association 有关的内容,只考虑 model 的基本属性。model 中用到了 Mongoid 特性而又比较复杂的方法也暂时先注释掉。

  3. 保证项目可以正常启动之后,修复每一个 model 的代码以及 association. 原本 HABTM 的关联全都改成 has_many :through 的方式。

这种迁移的方式比较原始,好在我们项目还没上线,不需要考虑数据迁移的问题,不然真是头大了。如果是已经上线的网站需要迁移的话,可以参考 從 Mongoid 遷移至 ActiveRecord 这篇文章,作者对整个过程的记录比较详细,而且有代码可以参考 XD

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

mongodb ではどのバージョンが一般的に使用されますか? mongodb ではどのバージョンが一般的に使用されますか? Apr 07, 2024 pm 05:48 PM

最新の機能と改善が提供される MongoDB の最新バージョン (現在 5.0) を使用することをお勧めします。バージョンを選択するときは、機能要件、互換性、安定性、コミュニティ サポートを考慮する必要があります。たとえば、最新バージョンにはトランザクションや集計パイプラインの最適化などの機能が備わっています。バージョンがアプリケーションと互換性があることを確認してください。運用環境の場合は、長期サポート バージョンを選択してください。最新バージョンでは、より積極的なコミュニティサポートが提供されています。

Nodejsとvuejsの違い Nodejsとvuejsの違い Apr 21, 2024 am 04:17 AM

Node.js はサーバー側の JavaScript ランタイムであり、Vue.js は対話型ユーザー インターフェイスを作成するためのクライアント側の JavaScript フレームワークです。 Node.js はバックエンド サービス API 開発やデータ処理などのサーバー側開発に使用され、Vue.js はシングルページ アプリケーションや応答性の高いユーザー インターフェイスなどのクライアント側開発に使用されます。

mongodb によって作成されたデータベースはどこにありますか? mongodb によって作成されたデータベースはどこにありますか? Apr 07, 2024 pm 05:39 PM

MongoDB データベースのデータは、ローカル ファイル システム、ネットワーク ファイル システム、またはクラウド ストレージに配置できる指定されたデータ ディレクトリに保存されます。具体的な場所は次のとおりです: ローカル ファイル システム: デフォルトのパスは Linux/macOS: /data/db、Windows: C:\data\db。ネットワーク ファイル システム: パスはファイル システムによって異なります。クラウド ストレージ: パスはクラウド ストレージ プロバイダーによって決定されます。

mongodbデータベースの利点は何ですか mongodbデータベースの利点は何ですか Apr 07, 2024 pm 05:21 PM

MongoDB データベースは、その柔軟性、スケーラビリティ、および高いパフォーマンスで知られています。その利点には、データを柔軟かつ非構造化された方法で保存できるドキュメント データ モデルが含まれます。シャーディングによる複数サーバーへの水平スケーラビリティ。クエリの柔軟性により、複雑なクエリと集計操作をサポートします。データ レプリケーションとフォールト トレランスにより、データの冗長性と高可用性が確保されます。 JSON サポートにより、フロントエンド アプリケーションと簡単に統合できます。大量のデータを処理する場合でも高速な応答を実現する高いパフォーマンス。オープンソースでカスタマイズ可能で無料で使用できます。

mongodb とはどういう意味ですか? mongodb とはどういう意味ですか? Apr 07, 2024 pm 05:57 PM

MongoDB は、大量の構造化データと非構造化データを保存および管理するために使用されるドキュメント指向の分散データベース システムです。その中心的な概念にはドキュメントのストレージと配布が含まれ、その主な機能には動的スキーマ、インデックス作成、集約、マップリデュース、レプリケーションが含まれます。コンテンツ管理システム、電子商取引プラットフォーム、ソーシャル メディア Web サイト、IoT アプリケーション、モバイル アプリケーション開発で広く使用されています。

mongodbを開く方法 mongodbを開く方法 Apr 07, 2024 pm 06:15 PM

Linux/macOS の場合: データ ディレクトリを作成し、「mongod」サービスを開始します。 Windows の場合: データ ディレクトリを作成し、Service Manager から MongoDB サービスを開始します。 Docker の場合: 「docker run」コマンドを実行します。他のプラットフォームの場合: MongoDB のドキュメントを参照してください。確認方法: 「mongo」コマンドを実行して接続し、サーバーのバージョンを確認します。

mongodb データベース ファイルはどこにありますか? mongodb データベース ファイルはどこにありますか? Apr 07, 2024 pm 05:42 PM

MongoDB データベース ファイルは、MongoDB データ ディレクトリにあります。デフォルトでは /data/db です。このディレクトリには、.bson (ドキュメント データ)、ns (コレクション情報)、journal (書き込み操作レコード)、wiredTiger (WiredTiger 使用時のデータ) が含まれています。ストレージ エンジン ) および config (データベース構成情報) およびその他のファイル。

navicat の有効期限が切れた場合の対処方法 navicat の有効期限が切れた場合の対処方法 Apr 23, 2024 pm 12:12 PM

Navicat の有効期限の問題を解決するには、ライセンスを更新する、自動更新を無効にする、Navicat プレミアム エッセンシャルの無料バージョンを使用する、などがあります。

See all articles