Çözmem gereken aynı problem var ve varyantları da göz önünde bulunduruyorum. SaaS çok kiracılı uygulamalar yaratma konusunda uzun yıllara dayanan deneyimim olduğu için, ilişkisel veritabanları ile önceki deneyimlerime dayanarak ikinci seçeneği de seçecektim.
Araştırmamı yaparken mongodb destek sitesinde bu makaleyi buldum (gittiğinden beri eklenmiştir):
https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Adamlar ne pahasına olursa olsun 2. seçeneklerden kaçınmayı söylediler, anladığım kadarıyla özellikle mongodb'a özgü değil. Benim izlenimim, veritabanı tasarımının özellikleri nedeniyle araştırdığım NoSQL veritabanlarının çoğu (CoachDB, Cassandra, CouchBase Server, vb.) İçin geçerli olduğu yönünde.
Koleksiyonlar (veya kovalar veya farklı DB'lerde adlandırırlarsa), RDBMS'deki güvenlik şemalarıyla aynı şey değildir, ancak belgeler için konteynır görevi görmelerine rağmen, iyi kiracı ayırımı uygulamak için yararsızdır. Koleksiyonlara göre güvenlik kısıtlamaları uygulayabilecek NoSQL veritabanı bulamadım.
Tabii ki, veritabanı / sunucu düzeyinde erişimi kısıtlamak için mongodb rol tabanlı güvenliği kullanabilirsiniz. ( http://docs.mongodb.org/manual/core/authorization/ )
1. seçeneği şu durumlarda tavsiye ederim:
- Bu senaryonun tasarımı, uygulaması ve testinin karmaşıklığıyla başa çıkmak için yeterli zamana ve kaynağa sahipsiniz.
- Farklı kiracılar için veritabanında yapı ve işlevsellik açısından çok fazla farklılık olmayacaksa.
- Uygulama tasarımınız, kiracıların çalışma zamanında yalnızca minimum özelleştirme yapmasına izin verecektir.
- Alanı optimize etmek ve donanım kaynaklarının kullanımını en aza indirmek istiyorsanız.
- Binlerce kiracınız olacaksa.
- Hızlı ve iyi bir maliyetle ölçeklendirmek istiyorsanız.
- Kiracılara bağlı olarak verileri yedeklemeyecekseniz (her kiracı için ayrı yedeklemeler bulundurun). Bu senaryoda bile bunu yapmak mümkündür ama çaba çok büyük olacaktır.
Aşağıdaki durumlarda varyant 3'e giderim:
- Küçük bir kiracı listeniz olacak (birkaç yüz).
- İşin özellikleri, farklı kiracılar için veritabanı yapısındaki büyük farklılıkları destekleyebilmenizi gerektirir (örn. 3. taraf sistemlerle entegrasyon, verilerin içe-dışa aktarılması).
- Uygulama tasarımınız, müşterilerin (kiracıların) uygulama çalışma zamanında önemli değişiklikler yapmasına (modül ekleme, alanları özelleştirme vb.) Olanak tanır.
- Yeni donanım düğümleriyle hızla ölçeklendirmek için yeterli kaynağa sahipseniz.
- Kiracı başına verilerin sürümlerini / yedeklerini tutmanız gerekiyorsa. Ayrıca geri yükleme de kolay olacaktır.
- Sizi farklı veritabanlarında (hatta veri merkezlerinde) farklı kiracıları tutmaya zorlayan yasal / düzenleyici kısıtlamalar vardır.
- Mongodb'un roller gibi kullanıma hazır güvenlik özelliklerinden tam olarak yararlanmak istiyorsanız.
- Kiracılar arasında büyüklük bakımından büyük farklılıklar vardır (çok sayıda küçük kiracınız ve çok az sayıda çok büyük kiracınız var).
Başvurunuz hakkında ek ayrıntılar gönderirseniz, belki size daha ayrıntılı tavsiyelerde bulunabilirim.