Saya sedang berpikir untuk membuat aplikasi multi-tenant menggunakan MongoDB. Saya belum bisa menebak berapa banyak penyewa yang saya miliki, tapi saya ingin bisa mencapai ribuan.
Saya dapat memikirkan tiga strategi:
- Semua penyewa dalam koleksi yang sama, menggunakan bidang khusus penyewa untuk keamanan
- 1 Koleksi per penyewa dalam satu DB bersama
- 1 Database per penyewa
Suara di kepalaku menyarankan agar aku memilih opsi 2.
Pikiran dan implikasinya, siapa?
mongodb
multi-tenant
Braintapper
sumber
sumber
Jawaban:
Saya memiliki masalah yang sama untuk dipecahkan dan juga mempertimbangkan varian. Karena saya memiliki pengalaman bertahun-tahun membuat aplikasi multi-tenant SaaS, saya juga akan memilih opsi kedua berdasarkan pengalaman saya sebelumnya dengan database relasional.
Saat melakukan penelitian, saya menemukan artikel ini di situs dukungan mongodb (cara kembali ditambahkan sejak hilang): https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Orang-orang menyatakan untuk menghindari opsi ke-2 dengan biaya berapa pun, yang seperti yang saya mengerti tidak terlalu spesifik untuk mongodb. Kesan saya adalah bahwa ini berlaku untuk sebagian besar dbs NoSQL yang saya teliti (CoachDB, Cassandra, CouchBase Server, dll.) Karena spesifikasi desain database.
Koleksi (atau keranjang atau bagaimanapun mereka menyebutnya dalam DB yang berbeda) tidak sama dengan skema keamanan di RDBMS meskipun mereka berperilaku sebagai wadah untuk dokumen, mereka tidak berguna untuk menerapkan pemisahan penyewa yang baik. Saya tidak dapat menemukan database NoSQL yang dapat menerapkan batasan keamanan berdasarkan koleksi.
Tentu saja Anda dapat menggunakan keamanan berbasis peran mongodb untuk membatasi akses pada tingkat database / server. ( http://docs.mongodb.org/manual/core/authorization/ )
Saya akan merekomendasikan opsi pertama ketika:
Saya akan memilih varian 3 jika:
Jika Anda memposting detail tambahan tentang aplikasi Anda, mungkin saya dapat memberikan saran yang lebih rinci.
sumber
Saya menemukan jawaban yang bagus di komentar di tautan ini:
http://blog.boxedice.com/2010/02/28/notes-from-a-production-mongodb-deployment/
Pada dasarnya opsi # 2 tampaknya menjadi cara terbaik untuk pergi.
Kutipan dari komentar David Mytton:
sumber
Ada artikel yang masuk akal di MSDN tentang arsitektur data multi-tenant yang mungkin ingin Anda rujuk. Beberapa topik utama yang disinggung oleh artikel ini:
Yang juga disinggung adalah beberapa pola untuk konfigurasi Software as a Service (SaaS).
Selain itu, patut dilihat adalah artikel menarik dari SQL Anywhere guys .
Pandangan pribadi saya sendiri - kecuali Anda yakin dengan keamanan / kepercayaan yang diberlakukan, saya akan memilih opsi 3, atau jika masalah skalabilitas melarang fallback ke opsi 2 minimal. Yang mengatakan ... Saya bukan pro dengan MongoDB. Saya menjadi sangat gugup menggunakan "skema" bersama - tetapi saya dengan senang hati akan tunduk kepada praktisi yang lebih berpengalaman.
sumber
Saya akan memilih opsi 2.
Namun Anda dapat mengatur opsi baris perintah mongod.exe --smallfiles. Ini berarti bahwa ukuran file terbesar adalah 0,5 gigabyte dan bukan 2 gigabyte. Saya menguji ini dengan mongo 1.42. Jadi opsi 3 bukan tidak mungkin.
sumber
Menurut penelitian saya di MongoDB. Trucos y consejos. Aplicaciones multitenant. opsi itu tidak disarankan jika Anda tidak tahu berapa banyak penyewa yang dapat Anda miliki, bisa jadi ribuan dan akan rumit jika menyangkut sharding, bayangkan juga memiliki ribuan koleksi dalam satu database ... Jadi dalam kasus Anda, ini disarankan untuk menggunakan opsi satu. Sekarang jika Anda akan memiliki jumlah pengguna yang terbatas, itu sudah berbeda dan ya, Anda dapat menggunakan opsi dua seperti yang Anda pikirkan.
sumber
Sementara pembahasan di sini adalah tentang NoSQL dan terutama MongoDB, kami di Citus menggunakan PostgreSQL dan membangun database multi-tenant terdistribusi / sharded.
Panduan kasus penggunaan kami menjelaskan aplikasi contoh, yang mencakup skema dan berbagai fitur khusus multi-tenant.
Untuk data yang lebih tidak terstruktur, kami menggunakan kolom JSONB PostgreSQL untuk menyimpan data tersebut dan data khusus penyewa.
sumber