NoSQL ve Diğer SQL Drupal Kurulumları


14

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?


Bu Károly Négyesi'nin "yetkili" bir cevap vereceği bir sorudur. Kesinlikle MongoDB'yi Drupal ile kullanmanın avantajını biliyor.
kiamlaluno

Aklımı oku .. önemli faydalar varsa diğer seçeneklerle çok ilgilenen ve tabii ki artıları eksileri ile geliyor.
Kevin

Yanıtlar:


13

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:

  • SQL'de depolanan varlığın temel tablosu (ör. Kullanıcılar tablosu, düğüm tablosu vb.)
  • SQL'de depolanan tüm alanlar
  • MongoDB'de çoğaltılan varlıkların temel tablolarından özellikleri

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.


Damien Tournoud: Binlerce girdinin sadece onda biri ile performans sorunları yaşıyorsanız, muhtemelen altta yatan bir sorun var (DBMS yapılandırması, kötü yazılmış sorgular, herhangi bir şey olabilir). Altta yatan SQL şeması yeterince iyi ise, tek bir tabloda bir milyon girişten önce endişelenmeniz gerekmez (ancak düzeltmeleri ve çok değerli alanları düşünürseniz alanlar hızlı büyüyebilir).
Pierre

Demek istediğim, şemamız normalleştirildi ve sonuç olarak sorgulama performansı çok düşük. Sorgu performansını artırmak için şemayı denormalize etmeniz gerekir. Bizim durumumuzda MongoDB kullanmanın ana avantajı, bir çeşit "otomatik denormalizasyon motoru" olmasıdır.
Damien Tournoud

Tabii ki, MongoDB burada harika çünkü belge odaklı bir veritabanı. Varlıklar gibi karmaşık belgelerin SQL depolamada depolanması sadece aptalca. Bu bizim varsayılan uygulamamızdır, ancak kullanmanız gerektiği anlamına gelmez :)
Damien Tournoud

@Pierre: Damien , onuncu bin varlıktan bahsetti , bu da masa sıralarından tamamen farklı bir şey olabilir. Örneğin, bu varlıkta 10 veya daha fazla alanınız olabilir, ardından böyle bir varlık her yüklendiğinde ayrı bir sorgu ile sorgulanması gereken 10 ek tablonuz olur. MongoDB, varlık taban tablosunun yerine bu ek tabloların yerini alabilir.
Berdir

2
Hiçbir modül alanların MySQL'de olmasını beklememelidir. Drupal 7'deki alanları sorgulamanın tek yolu EntityFieldQuery'dir. Alan tablolarını doğrudan sorgulıyorsa modülde bir hata açın. Şu anda bu modüllerden hiçbirini tanımıyorum.
Damien Tournoud

7

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_storagealan 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.


Merhaba Berdir! Performansı test etmek için MongoDB'yi mevcut bir proyekt içine düşürüp düşürmediğimi, sonuç olmadan modülü etkinleştirip devre dışı bırakacağımı biliyor musunuz? Mongo'yu denemek istiyorum, ya da işe yaramazsa ya da bir şey? Denemek güvenli mi? (Bunu garanti edemeyeceğini biliyorum ama çoğu durumda ne olacağını merak ediyorum)
Beto Aveiga

1
Bir başlangıç ​​için, onu bırakamazsınız. Her alan, kullandığınız depolama arka ucunu, alanlarınızı değiştirmek / yeniden oluşturmak, görünümlerinizi yeniden oluşturmak zorunda kalacak şekilde yapılandırmıştır (efq_views arka ucunu kullanmaları gerektiği için) ), alan veri tablolarına karşı doğrudan sorgular yazdıysanız, kendi sorgularınız olabilir. İlk karşılaştırma için yeni bir kurulumda aynı yapıyı yeniden oluşturmak daha kolay olabilir.
Berdir

Teşekkürler Berdir! MongoDB'yi birkaç gün önce denedim, ancak performansta gözle görülür bir kazanç olmadı, ancak şu anda bana söylediğin şeylerin / değişikliklerin farkında değildim. "MongoDB daha büyük sitelerde fark yaratmalı" diye düşündüm. MongoDB'yi tekrar deneyeceğim.
Beto Aveiga

5

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.