DynamoDB vs MongoDB NoSQL [ditutup]

172

Saya mencoba mencari tahu apa yang bisa saya gunakan untuk proyek masa depan, kami berencana untuk menyimpan dari sekitar 500 ribu catatan per bulan pada tahun pertama dan mungkin lebih untuk tahun-tahun berikutnya ini adalah aplikasi vertikal sehingga tidak perlu menggunakan database untuk ini, itulah alasan mengapa saya memutuskan untuk memilih penyimpanan data noSQL.

Pilihan pertama yang muncul di benak saya adalah mongo db karena merupakan produk yang sangat matang dengan banyak dukungan dari masyarakat tetapi di sisi lain kami mendapat produk baru yang menawarkan layanan terkelola dengan kinerja terbaik, saya akan mengembangkan ini aplikasi tetapi tidak ada rencana pemeliharaan (setidaknya untuk saat ini) jadi saya pikir itu akan menjadi keuntungan besar karena amazon menyediakan cara elastis untuk skala.

Perhatian utama saya adalah tentang struktur permintaan, saya belum melihat kemampuan permintaan dynamoDB tetapi karena penyimpanan data ak / v saya merasa bahwa ini bisa lebih terbatas daripada mongo db.

Jika seseorang memiliki pengalaman memindahkan proyek dari mongoDB ke DynamoDB, saran apa pun akan sangat dihargai.

jack.the.ripper
sumber
3
Jika Anda menginginkan saran tentang struktur kueri, saya sarankan memberikan contoh skema Anda bersama dengan kasus penggunaan Anda untuk mengakses data. Tanpa ini, sulit untuk membuat keputusan yang sesuai.
James Wahlin
Memang, bagaimana Anda meminta data dapat secara dramatis mempengaruhi pemilihan backend db. Seberapa hierarkis pertanyaan saya yang pertama.
zanlok
3
Saya terkejut pertanyaan ini belum ditutup oleh orang peringkat SO. Biasanya pertanyaan yang meminta saran ditutup karena mereka tidak meminta bantuan dengan masalah yang sangat spesifik.
LS

Jawaban:

67

Baru-baru ini saya memigrasikan MongoDB saya ke DynamoDB, dan menulis 3 blog untuk berbagi beberapa pengalaman dan data tentang kinerja, biaya.

Bermigrasi dari MongoDB ke AWS DynamoDB + SimpleDB

7 Alasan Anda Harus Menggunakan MongoDB di atas DynamoDB

3 Alasan Anda Harus Menggunakan DynamoDB di atas MongoDB

Mason Zhang
sumber
terima kasih telah memposting artikel Anda di sini yang membantu saya untuk memiliki visi yang lebih jelas dan itu pasti akan membantu saya pada saat saya akan membuat keputusan
jack.the.ripper
1
membaca tiga alasan bahwa Anda harus menggunakan dinamo lebih dari mongo ada perusahaan yang menawarkan layanan terkelola yang lebih mahal dibandingkan dengan dynamoDB tetapi yang dapat dipertimbangkan jika Anda tidak memiliki orang yang bertanggung jawab atas pemeliharaan nosql , nama perusahaan adalah mongoLab
jack.the.ripper
2
@Pedro Terima kasih banyak untuk pengingatnya. Mungkin saya menggunakan MongoDB dengan cara yang tidak efisien. Saya memiliki 1,4 juta catatan, dan menempati 8G disk, tetapi setelah ditransfer ke DynamoDB, hanya menempati 300 juta penyimpanan. Saya mungkin perlu tes dan melihat penyimpanan apa jika saya memigrasikan data tersebut ke MongoLab :)
Mason Zhang
1
Apakah tautannya rusak?
fedorqui 'SO berhenti merugikan'
@MasonZhang Akan sangat menarik untuk melihat penyimpanan apa jika Anda memigrasikan data tersebut ke MongoLab.
fuiiii
164

Saya tahu ini sudah tua, tetapi masih muncul ketika Anda mencari perbandingan. Kami menggunakan Mongo, telah pindah hampir seluruhnya ke Dynamo, yang merupakan pilihan pertama kami sekarang. Bukan karena memiliki lebih banyak fitur, tidak. Mongo memiliki bahasa query yang lebih baik, Anda dapat mengindeks dalam suatu struktur, ada banyak hal kecil. Keunggulan Dynamo adalah dalam apa yang dinyatakan OP dalam komentarnya: mudah. Anda tidak harus mengurus server apa pun. Ketika Anda mulai mengatur solusi sharded Mongo, itu menjadi rumit. Anda dapat pergi ke salah satu perusahaan hosting, tetapi itu juga tidak murah. Dengan Dynamo, jika Anda membutuhkan lebih banyak throughput, Anda cukup mengklik tombol. Anda dapat menulis skrip untuk menskala secara otomatis. Ketika saatnya untuk meningkatkan Dynamo, itu dilakukan untuk Anda. Itu semua banyak stres berharga dan waktu tidak dihabiskan. Jika kamu tidak'

Jadi kita sekarang akan menggunakan Dynamo secara default. Mongo mungkin, jika struktur data cukup rumit untuk menjaminnya, tapi kita mungkin akan kembali ke database SQL. Dynamo tumpul, Anda benar-benar perlu memikirkan bagaimana Anda akan membangunnya, dan kemungkinan Anda akan menggunakan Redis di Elasticcache untuk membuatnya bekerja untuk hal-hal kompleks. Tapi itu pasti baik untuk tidak harus mengurusnya. Kode Anda Itu dia.

CargoMeister
sumber
35
Jika seseorang harus membandingkan basis data dengan basis data, seseorang harus membandingkan fitur basis data saja. Solusi yang dihosting bukanlah fitur basis data. Jika Anda mencari MongoDB yang di-host, pilih MongoHQ dan mereka melakukan semua pekerjaan kasar yang mungkin ingin Anda hindari sambil fokus pada pekerjaan inti Anda.
Kabeer
12
Memang benar, meskipun perbandingan biaya awal yang kami lakukan menunjukkan bahwa dinamo adalah transaksi yang cukup bagus. Masalah lainnya adalah bahwa jika Anda harus menaikkan / menurunkan dinamo, itu adalah klik tombol. Jika Anda harus menambahkan disk atau mengubah ukuran server mongo, ada downtime yang terlibat, apakah Anda harus melakukannya, atau orang lain.
CargoMeister
@ Kabeer Saya 100% setuju dengan Anda secara teknis, tetapi di dunia nyata seluruh paket penting untuk membuat keputusan bisnis. Pada akhirnya, ini adalah keputusan bisnis.
poitroae
59

Dengan 500 ribu dokumen, tidak ada alasan untuk mengukur apa pun. Laptop biasa dengan SSD dan ram 8GB dapat dengan mudah melakukan 10 juta catatan, jadi jika Anda mencoba untuk memilih karena menskalakan pilihan Anda tidak terlalu penting. Saya sarankan Anda memilih yang paling Anda sukai, dan mungkin di mana Anda dapat menemukan dukungan online yang paling banyak.

Derick
sumber
ya kekhawatiran walikota saya adalah tentang meningkatkan dan pemeliharaan dari waktu ke waktu untuk jujur ​​secara pribadi saya merasa bahwa mongoDB dapat melakukan pekerjaan yang saya hanya pikirkan dalam hal pemeliharaan jangka menengah dan panjang
jack.the.ripper
10
Derick, faktor utama lain dalam skala adalah pemanfaatan, bukan hanya jumlah dokumen atau ukuran db. @jack tidak "merasa" tetapi mengandalkan pengujian, termasuk platform dan perangkat keras penyebaran akhir; satu minggu dihabiskan mengisi varian pasangan db dengan data dan pembandingan harus mengarah pada keputusan yang tepat menghemat banyak rasa sakit.
zanlok
3
Menyediakan produk / layanan profesional jauh melampaui solusi sederhana "ini bisa melakukan itu". Hanya karena mesin murahan dapat menjalankan Linux, MongoDB, dan jutaan catatan tanpa biaya, tidak sama dengan kinerja hebat di dunia nyata. Catatan 500K (dengan skema SIMPLE) mungkin akan menjadi kandidat yang baik untuk DynamoDB hanya karena OP tidak akan memiliki biaya pemeliharaan (setidaknya untuk perangkat keras) dan biaya bulanan mungkin akan jauh lebih murah daripada biaya server selama satu atau dua tahun.
cbmeeks
21

Untuk perbandingan tinjauan singkat, saya sangat suka situs web ini, yang memiliki banyak halaman perbandingan, misalnya AWS DynamoDB vs MongoDB; http://db-engines.com/en/system/Amazon+DynamoDB%3BMongoDB

AnneTheAgile
sumber
2
terima kasih untuk tautannya! Saya belum pernah ke db-engines.com. Situs hebat!
Tom Hert
16

Jawaban singkat: Mulai dengan SQL dan tambahkan NoSQL hanya jika diperlukan. (Kecuali jika Anda tidak membutuhkan apa pun di luar kueri yang sangat sederhana)

Pengalaman pribadi saya: Saya belum pernah menggunakan MongoDB untuk kueri tetapi pada April 2015 DynamoDB masih sangat lumpuh ketika sampai pada apa pun di luar kueri kunci / nilai paling dasar. Saya suka itu untuk hal-hal dasar tetapi jika Anda ingin bahasa query kemudian mencari solusi database SQL nyata.

Di DynamoDB Anda dapat meminta pada hash atau pada kunci hash dan range, dan Anda dapat memiliki beberapa indeks global sekunder. Saya melakukan kueri pada satu tabel dengan 4 kemungkinan parameter filter dan mengurutkan hasilnya, ini didukung (nyaris) melalui penggunaan indeks sekunder global dengan ekspresi filter. Masalahnya muncul ketika Anda mencoba untuk mendapatkan hasil total yang cocok dengan filter, Anda tidak bisa hanya mencari 10 item pertama yang cocok dengan filter, tetapi itu memeriksa 10 item dan Anda mungkin mendapatkan 0 hasil yang valid yang memaksa Anda untuk terus mengulangi memindai dari tombol terus - rasa sakit di leher dan terlalu banyak menghabiskan kuota meja Anda membaca untuk skenario sederhana.

Untuk lebih spesifik tentang masalah batas dengan filter dalam kueri, ini berasal dari dokumen ( http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#ScanQueryLimit ):

Sebagai tanggapan, DynamoDB mengembalikan semua hasil yang cocok di dalamnya
ruang lingkup nilai Batas. Misalnya, jika Anda mengeluarkan Kueri
atau permintaan Pindai dengan nilai Batas 6 dan tanpa filter
ekspresi, operasi mengembalikan enam item pertama dalam 
tabel yang cocok dengan parameter permintaan. Jika Anda juga menyediakan
FilterExpression, operasi mengembalikan item dalam 
enam item pertama dalam tabel yang cocok dengan persyaratan filter.

Kesimpulan saya adalah bahwa kueri yang melibatkan FilterExpressions hanya dapat digunakan pada kesempatan yang sangat jarang dan tidak dapat diskalakan karena setiap kueri dapat dengan mudah membaca sebagian besar atau semua tabel Anda yang menghabiskan terlalu banyak unit baca DynamoDB. Setelah Anda menggunakan terlalu banyak unit baca, Anda akan terbebani dan melihat kinerja yang buruk.

Pendapat para ahli: Dalam KTT AWS pada 9 April 2015, Brett Hollman, Manajer, Arsitektur Solusi, AWS dalam pidatonya tentang scalling kepada 10 juta pengguna pertama Anda, para advokat, dimulai dengan database SQL dan kemudian menggunakan NoSQL hanya jika dan jika itu masuk akal. Karena cepat atau lambat Anda mungkin perlu server SQL di suatu tempat di tumpukan Anda. Slide-nya ada di sini: http://www.slideshare.net/AmazonWebServices/deep-dive-scaling-up-to-your-first-10-million-users Lihat slide 28.

Deemoe
sumber
Anda harus benar-benar memeriksa betapa mudahnya mengintegrasikan cloudearch dengan stream dynamodb dan lambda untuk mencapai teks penuh atau query berbasis lokasi.
MrTJ
4
Pilih basis data Anda sesuai dengan kebutuhan Anda. Ini bukan pilihan antara SQL dan noSQL, tetapi antara DB berorientasi dokumen, DB berorientasi grafik, DB nilai kunci, RDMBS .... Tidak ada pilihan emas, dan SQL tentu saja tidak.
vcarel
14

Kami memilih kombinasi Mongo / Dynamo untuk produk perawatan kesehatan. Pada dasarnya mongo memungkinkan pencarian yang lebih baik, tetapi Dynamo yang dihosting sangat bagus karena HIPAA-nya sesuai tanpa kerja ekstra. Jadi kami meng-host bagian mongo tanpa data pribadi pada pengaturan standar dan memungkinkan amazon untuk berurusan dengan bagian HIPAA dalam hal infrastruktur. Kami dapat meminta item tertentu dari mongo yang memunculkan dokumen dengan pointer (ID) dari dokumen Dynamo yang terkait.

Alasan utama kami memilih untuk melakukan ini menggunakan mongo alih-alih meng-hosting seluruh aplikasi pada dinamo adalah karena 2 alasan. Pertama, kami harus melakukan preform pencarian berdasarkan lokasi mana mongo hebat di dan pada saat itu, Dynamo tidak, tetapi mereka memiliki pilihan sekarang.

Kedua adalah bahwa beberapa dokumen tidak terstruktur dan kami tidak tahu sebelumnya data apa yang akan, jadi misalnya katakanlah pengguna memasukkan dokumen dalam koleksi "form" seperti ini: {"username": "user1", " email ":" [email protected] "}. Dan pengguna lain menempatkan ini dalam koleksi yang sama {"phone": "813-555-3333", "location": [28.1234, -83.2342]}. Dengan mongo kami dapat mencari bidang dinamis dan tidak dikenal ini kapan saja, dengan Dynamo, Anda dapat melakukan ini tetapi harus membuat indeks setiap kali bidang baru ditambahkan yang Anda inginkan dapat dicari. Jadi, jika Anda belum pernah memiliki bidang telepon dalam dokumen Dynamo Anda sebelum dan kemudian tiba-tiba, seseorang menambahkannya, itu benar-benar tidak dapat ditelusuri.

Sekarang ini memunculkan poin lain yang telah Anda sebutkan. Terkadang memilih solusi yang tepat untuk pekerjaan itu tidak selalu berarti memilih produk terbaik untuk pekerjaan itu. Misalnya Anda mungkin memiliki klien yang membutuhkan dan akan menggunakan sistem yang Anda buat selama 10+ tahun. Menggunakan solusi SaaS / IaaS yang cukup baik untuk menyelesaikan pekerjaan mungkin merupakan opsi yang lebih baik karena Anda dapat mengandalkan amazon untuk menjaga dan memelihara sistem mereka dalam jangka panjang.

Steffan Perry
sumber
9

Saya telah bekerja pada keduanya dan jenis penggemar keduanya.

Tetapi Anda perlu memahami kapan harus menggunakan apa dan untuk tujuan apa.

Saya tidak berpikir Ini ide bagus untuk memindahkan semua basis data Anda ke DynamoDB, alasan mengapa kueri sulit kecuali pada kunci primer dan sekunder, Pengindeksan terbatas dan pemindaian di DynamoDB menyakitkan.

Saya akan memilih jenis DB hibrid, di mana data yang dapat ditanyakan secara luas harus ada MongoDB, dengan semua fitur itu Anda tidak akan pernah merasa terkendala untuk memberikan peningkatan atau modifikasi.

DynamoDB cepat kilat (lebih cepat dari MongoDB) sehingga DynamoDB sering digunakan sebagai alternatif untuk sesi dalam aplikasi yang dapat diskalakan. Praktik terbaik DynamoDB juga menunjukkan bahwa jika ada banyak data yang kurang digunakan, pindahkan ke tabel lain.

Jadi misalkan Anda memiliki artikel atau feed. Orang-orang lebih cenderung mencari barang minggu lalu atau barang bulan ini. kemungkinan sangat jarang bagi orang untuk mengunjungi data lama dua tahun. Untuk keperluan ini, DynamoDB lebih suka menyimpan data berdasarkan bulan atau tahun dalam tabel yang berbeda.

DynamoDB tampaknya scalable, sesuatu yang harus Anda lakukan secara manual di MongoDB. namun Anda akan kehilangan kinerja DynamoDB, jika Anda tidak mengerti tentang partisi throughput dan bagaimana penskalaan bekerja di belakang layar.

DynamoDB harus digunakan di mana kecepatan sangat penting, MongoDB di sisi lain memiliki terlalu banyak tangan dan fitur, sesuatu yang kurang DynamoDB.

misalnya, Anda dapat memiliki set replika MongoDB sedemikian rupa sehingga salah satu replika menyimpan instance data dari 8 (atau apa pun) jam. Sangat berguna, jika Anda mengacaukan sesuatu yang besar di DB Anda dan ingin mendapatkan data seperti sebelumnya.

Itu pendapat saya.

Rahul Kumar
sumber
1
Dan kombinasi Redis dan MongoDB? Itu luar biasa, saya pikir.
ismaestro
Saya kira begitu, saya tidak memiliki pengalaman tentang Redis tetapi pasti itu banyak digunakan karena kinerjanya, dalam memori DB hampir selalu lebih baik daripada DB berbasis disk. Jadi saya pikir data yang perlu diakses pada permintaan besar dan frekuensi tinggi harus ke Redis. Di sisi lain untuk data lesu besar MongoDB harus digunakan.
Rahul Kumar
7

Ingat, saya hanya bereksperimen dengan MongoDB ...

Dari apa yang saya baca, DynamoDB telah datang jauh dalam hal fitur. Dulu toko nilai kunci super-dasar dengan penyimpanan yang sangat terbatas dan kemampuan query. Sejak itu berkembang, sekarang mendukung ukuran dokumen yang lebih besar + dukungan JSON dan indeks sekunder global . Kesenjangan antara apa yang DynamoDB dan MongoDB tawarkan dalam hal fitur semakin kecil setiap bulan. Fitur-fitur baru DynamoDB diperluas di sini .

Banyak perbandingan MongoDB vs DynamoDB kedaluwarsa karena penambahan fitur DynamoDB baru-baru ini. Namun, posting ini menawarkan beberapa poin meyakinkan lain untuk memilih DynamoDB, yaitu sederhana, perawatan rendah, dan sering kali biaya rendah. Diskusi lain di sini tentang pilihan basis data menarik untuk dibaca, meskipun agak lama.

Takeaway saya: jika Anda melakukan query database serius atau bekerja dalam bahasa yang tidak didukung oleh DynamoDB, gunakan MongoDB. Kalau tidak, tetap dengan DynamoDB.

AndrewSouthpaw
sumber