Drupal'da NoSQL (MongoDB'den) MySQL, PostGRE SQL veya MSSQL üzerinde çalışmanın avantajları nelerdir? Depolamayı kullanmanın sağladığı avantajlar mı yoksa bazı Drupal yapılandırmasının değişmesi mi gerekiyor?
Drupal'da NoSQL (MongoDB'den) MySQL, PostGRE SQL veya MSSQL üzerinde çalışmanın avantajları nelerdir? Depolamayı kullanmanın sağladığı avantajlar mı yoksa bazı Drupal yapılandırmasının değişmesi mi gerekiyor?
Yanıtlar:
MongoDB, varlıklarınızın çoğunu veya tamamını hızlı, belge odaklı depolamaya depolamak için kullanılabilir. Bu tür depolama, Drupal çekirdeğindeki ("alan başına bir tablo" şemasına dayanan) standart SQL tabanlı depolamaya göre çok daha iyi ölçeklenir.
Drupal 7'nin şu anki durumunda:
Bu MongoDB varlıkları üzerinde hızlı sorgulama ve hiçbir Openource SQL veritabanı desteklemeyen karmaşık dizinler ekleme yeteneği sağlar (tablolar arasında dizinler dahil). Aynı zamanda, birlikte çalışabilirliği kaybetmezsiniz, çünkü varlığın temel tablosu hala SQL'de depolanır ve bu nedenle hala yalnızca SQL'e (Modüller gibi) sahip modüllerle birleştirilebilir.
Bu tür hızlı sorgulama, varlıklar, özellikleri ve alanları üzerinde soyut bir şekilde sorgu oluşturmanın bir yolu olan EntityFieldQuery mekanizması sayesinde kullanılabilir. Çekirdekte varsayılan uygulama bu sorguları SQL'e çevirir, ancak MongoDB modülü, bu sorguları doğrudan MongoDB'den tatmin edebilen tam özellikli bir uygulamaya sahiptir.
Görünümler için EntityFieldQuery arka ucu sayesinde, alıştığınız araçları kullanarak bu güçten kolayca yararlanabilirsiniz. Tek dezavantajı, ilişkilerin desteklenmemesidir (ancak pratikte nadiren bunlara ihtiyacınız vardır - ve bu, varlık nesnesine ek veriler iterek ve bunları varlığın ek özellikleri olarak göstererek eklenebilir).
Özetle, sorgu performansı projenizde bir sorun olduğunda, önemli bir veri kümeniz olur olmaz (belirli bir varlık türünde binlerce varlığın on onda birinden başlayarak), MongoDB net bir kazançtır çok az dezavantajı var. Şiddetle tavsiye edilir.
MongoDB ve benzeri, yapılandırılmış (hiyerarşik) verileri nispeten esnek bir şekilde depolamak için tasarlanmıştır.
Örneğin Drupal 7
, kullanırken field_sql_storage
, her alanın kendi tabloları olur. Bir içerik türüne 10 alan eklediğinizde, veritabanınızda 10 tablo bulunur. Bu düğümü yüklediğinizde, field_sql_storage
alan ve düğüm (veya kullanırken birden çok düğüm node_load_multiple
) başına bir sorgu yürütür .
Mongodb_field_storage komutunu kullandığınızda , bir düğümün tüm alanlarını tek bir belgede depolayabilir ve tek bir sorgu ile alabilirsiniz.
Ayrıca bekçi, oturumlar önbellek, bloklar gibi başka şeyler saklayabilir MongoDB .
Yine de MySQL'e ihtiyacınız var, MongoDB bunun yerine geçmiyor (sadece belirli parçalar için).
Diğer bir avantaj, MongoDB ile ölçeklendirmenin daha kolay olması , bir kümeye birçok sunucu ekleyebilmenizdir.
Artıları eksileri ile geliyor.
Drupal bir bütün olarak MongoDb'ye geçirilemez, bu nedenle iki veritabanını desteklemeniz ve birlikte iyi çalıştıklarından emin olmanız gerekir.
Birçok modül mongodb ile çalışamaz, böylece birlikte çalışabilirliği kaybedersiniz.
Eğer acil bir ihtiyacınız yoksa (sisteminizin bir kısmı istek sayısı veya veri miktarı ile başa çıkmıyor gibi) geçiş olmaz. Ve sınırlara yaklaşmaya başladığınızda bile, sorunu değiştirmeden önce sorunu probleme atmaya veya ayarlamaya bakın.
Bunu daha önce cevapladığımı sanıyordum , SO'da neredeyse iki kez var