Jadual Kandungan
迁移的原因
迁移的过程
Rumah pangkalan data tutorial mysql 从 MongoDB 迁移到 PostgreSQL

从 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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Versi mana yang biasanya digunakan untuk mongodb? Versi mana yang biasanya digunakan untuk mongodb? Apr 07, 2024 pm 05:48 PM

Adalah disyorkan untuk menggunakan versi terkini MongoDB (kini 5.0) kerana ia menyediakan ciri dan penambahbaikan terkini. Apabila memilih versi, anda perlu mempertimbangkan keperluan fungsian, keserasian, kestabilan dan sokongan komuniti Sebagai contoh, versi terkini mempunyai ciri seperti transaksi dan pengoptimuman saluran paip. Pastikan versi itu serasi dengan aplikasi. Untuk persekitaran pengeluaran, pilih versi sokongan jangka panjang. Versi terkini mempunyai sokongan komuniti yang lebih aktif.

Perbezaan antara nodejs dan vuejs Perbezaan antara nodejs dan vuejs Apr 21, 2024 am 04:17 AM

Node.js ialah masa jalan JavaScript bahagian pelayan, manakala Vue.js ialah rangka kerja JavaScript sisi klien untuk mencipta antara muka pengguna interaktif. Node.js digunakan untuk pembangunan bahagian pelayan, seperti pembangunan API perkhidmatan belakang dan pemprosesan data, manakala Vue.js digunakan untuk pembangunan sisi klien, seperti aplikasi satu halaman dan antara muka pengguna yang responsif.

Di manakah pangkalan data yang dibuat oleh mongodb? Di manakah pangkalan data yang dibuat oleh mongodb? Apr 07, 2024 pm 05:39 PM

Data pangkalan data MongoDB disimpan dalam direktori data yang ditentukan, yang boleh terdapat dalam sistem fail tempatan, sistem fail rangkaian atau storan awan Lokasi khusus adalah seperti berikut: Sistem fail tempatan: Laluan lalai ialah Linux/macOS: /data/db, Windows: C:\data\db. Sistem fail rangkaian: Laluan bergantung pada sistem fail. Storan Awan: Laluan ditentukan oleh pembekal storan awan.

Apakah kelebihan pangkalan data mongodb Apakah kelebihan pangkalan data mongodb Apr 07, 2024 pm 05:21 PM

Pangkalan data MongoDB terkenal dengan fleksibiliti, skalabiliti dan prestasi tingginya. Kelebihannya termasuk: model data dokumen yang membolehkan data disimpan dengan cara yang fleksibel dan tidak berstruktur. Skala mendatar kepada berbilang pelayan melalui sharding. Fleksibiliti pertanyaan, menyokong pertanyaan kompleks dan operasi pengagregatan. Replikasi data dan toleransi kesalahan memastikan lebihan data dan ketersediaan tinggi. Sokongan JSON untuk penyepaduan mudah dengan aplikasi bahagian hadapan. Prestasi tinggi untuk respons pantas walaupun semasa memproses sejumlah besar data. Sumber terbuka, boleh disesuaikan dan percuma untuk digunakan.

Apakah maksud mongodb? Apakah maksud mongodb? Apr 07, 2024 pm 05:57 PM

MongoDB ialah sistem pangkalan data teragih berorientasikan dokumen yang digunakan untuk menyimpan dan mengurus sejumlah besar data berstruktur dan tidak berstruktur. Konsep terasnya termasuk penyimpanan dan pengedaran dokumen, dan ciri utamanya termasuk skema dinamik, pengindeksan, pengagregatan, pengurangan peta dan replikasi. Ia digunakan secara meluas dalam sistem pengurusan kandungan, platform e-dagang, laman web media sosial, aplikasi IoT dan pembangunan aplikasi mudah alih.

Bagaimana untuk membuka mongodb Bagaimana untuk membuka mongodb Apr 07, 2024 pm 06:15 PM

Pada Linux/macOS: Cipta direktori data dan mulakan perkhidmatan "mongod". Pada Windows: Cipta direktori data dan mulakan perkhidmatan MongoDB daripada Pengurus Perkhidmatan. Dalam Docker: Jalankan arahan "docker run". Pada platform lain: Sila rujuk dokumentasi MongoDB. Kaedah pengesahan: Jalankan arahan "mongo" untuk menyambung dan melihat versi pelayan.

Di manakah fail pangkalan data mongodb? Di manakah fail pangkalan data mongodb? Apr 07, 2024 pm 05:42 PM

Fail pangkalan data MongoDB terletak dalam direktori data MongoDB, iaitu /data/db secara lalai, yang mengandungi .bson (data dokumen), ns (maklumat pengumpulan), jurnal (tulis rekod operasi), wiredTiger (data apabila menggunakan WiredTiger enjin storan ) dan konfigurasi (maklumat konfigurasi pangkalan data) dan fail lain.

Apa yang perlu dilakukan jika navicat tamat tempoh Apa yang perlu dilakukan jika navicat tamat tempoh Apr 23, 2024 pm 12:12 PM

Penyelesaian untuk menyelesaikan isu tamat tempoh Navicat termasuk: memperbaharui lesen dan menyahpasang semula kemas kini automatik, hubungi Navicat Premium Essentials;

See all articles