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.
sumber
Jawaban:
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
sumber
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.
sumber
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.
sumber
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
sumber
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 ):
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.
sumber
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.
sumber
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.
sumber
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.
sumber