Mnesia'nın büyük SQL veritabanı uygulamalarına göre avantajları ve bunlara göre farkı nedir?
Göze çarpan performans düşüşü olmadan veritabanını gerçekten çok büyük miktarda veri tutmak için kullanabilir miyim?
Mnesia'nın büyük SQL veritabanı uygulamalarına göre avantajları ve bunlara göre farkı nedir?
Göze çarpan performans düşüşü olmadan veritabanını gerçekten çok büyük miktarda veri tutmak için kullanabilir miyim?
Yanıtlar:
Partiye geç kaldığım için üzgünüm. :) İşte cevabım, 1996'dan beri Mnesia ve 1988'den beri çeşitli diğer veritabanı teknolojilerini kullanmaya dayanarak.
Mnesia ve MySQL gerçekten de farklı canavarlar ve hangisinin en iyisi olduğu, onu nasıl kullanmak istediğinize bağlı.
Uygulamanız Erlang'da yazılmışsa, Mnesia verileri uygulamanızla aynı bellek alanında saklamanıza izin verir; bu, tek bir veri nesnesini birkaç mikrosaniye kadar hızlı bir şekilde getirebileceğiniz anlamına gelir. Bu, MySQL'de mümkün değildir, çünkü uygulamanız ve veritabanınız bellekte ayrılacaktır. Mnesia'nın bunu yapabilmesinin ve hala sağlam olmasının nedeni, Erlang'ın hafızayı 'koruma' dil düzeyinde uygulamasıdır.
Genel olarak, SQL veritabanları gecikme yerine verimi tercih etme eğilimindedir ve gecikme söz konusu olduğunda, Mnesia + Erlang genellikle olağanüstüdür. Hangisinin sizin için en önemli olduğuna karar vermeniz gerekir. Belgelerde de yazdığı gibi (yukarıda), Mnesia'nın hedef uygulamaları, örneğin bir arama kurulumu için cevap süresi gereksinimlerinin 20 ms civarında olduğu telekom anahtarlama uygulamalarıydı. Bu, temel olarak, yalnızca veriler paylaşılan hafızadaysa veritabanından okuyabileceğiniz, ancak arama başına kurulum temelinde kalıcı depolamaya yazmaktan kaçınacağınız anlamına geliyordu. OTOH, bu uygulamaların geçici sorgu desteğine ihtiyacı yoktur ve çok büyük veri kümeleri kullanmazlar. Mnesia'nın diğer alanlara uygunluğunu arttırmak için bazı çalışmalar yapılmıştır, ancak bu Erlang / OTP geliştirme ekibi için bir öncelik değildir. Mnesia budur ve bu şekilde kalması muhtemeldir.
Mnesia ve MySQL'in hız için karşılaştırıldığı yukarıdaki bağlantıda, MySQL ise tek bir sunucuya karşı çalışan ve Mnesia ise tamamen çoğaltılmış bir veritabanı çalıştıran ve Mnesia - ve büyük eJabberd kümelerinin sahip olabileceği kadar çoğaltılmış bir veritabanı çalıştığını hatırlamak gerekir. 10 veya daha fazla erlang düğümü (ve dolayısıyla, 10 veya daha fazla Mnesia replikası). Fazlalık açısından bakıldığında, bu oldukça saçma ve maliyetli ve Mnesia hiçbir şekilde sizi zorlamaz. Belli ki her düğümde kötü hızlı okumalar veriyor, ancak yazarlar çok pahalı olacak. Okuduğum birkaç karşılaştırma, dağıtılmış Mnesia'yı tek düğümlü bir MySQL ile karşılaştırarak sonuçlandı; Artıklık MySQL için gerekli değilse, Mnesia için de gerekli olmamalıdır. Mnesia, çoğaltma kalıplarını seçmenize izin vermede oldukça esnektir ve veri konumu uygulamaya şeffaftır.
Mnesia da tablo başına 2 GB ile sınırlı değildir (belirli bir depolama seçeneği olmasına rağmen ). Bildiğim en büyük Mnesia veritabanı (64-bit) RAM + diskte yaklaşık 600 GB veri var - bunu önermesem de. 10-20 GB'a kadar her şey modern donanımda mükemmel bir şekilde iyi olmalı, ancak disc_only_copies'i tamamen atlayın ve disc_copies'i kullanın - gerekiyorsa daha fazla RAM satın alın. Parçalama desteğini (mnesia_frag) kullanmadan önce iki kez düşünürdüm - işe yarıyor, ancak nadiren belaya değiyor.
Belki de Mnesia ve MySQL arasındaki en büyük fark SQL’in kendisidir: Mnesia’nın gerçekten karşılaştırılabilir bir işlevi yoktur; QLC geçici sorgular için biraz destek sunar, ancak SQL ile aynı ligde değildir ve sorgu optimizasyon düzeyi de değildir. Takımlama ve tedarik sürecinde MySQL de üstündür ve analitik ihtiyacınız varsa hangisini seçmeniz gerektiği sorusu yoktur (örn. Mnesia değil).
Mnesia'yı izlemenin en iyi yolu Erlang dilinin bir uzantısı. Verileri parmaklarınızın ucuna getirir ve veri yapısının ve erişim modellerinin iyi bilindiği küçük veri kümeleri için mükemmeldir. Bu amaçla, MySQL kullanmak, MySQL'in en iyi çalıştığı şeyler için Mnesia'yı kullanmak kadar rahatsız edicidir.
Çoğu uygulama, aralarında bir yere düşer ve bu kararın verildiği yer. Her ikisini de kullanabilirsin ...
Gönderen belgeler :
Mnesia, sürekli çalışma ve yumuşak gerçek zamanlı özellikler gerektiren telekomünikasyon uygulamaları ve diğer Erlang uygulamaları için uygun, dağıtık bir Veritabanı Yönetim Sistemidir. Telekomünikasyon uygulamaları oluşturmak için bir kontrol sistemi platformu olan Açık Telekom Platformu'nun (OTP) bir bölümüdür.
Özellikle, birçok durmadan sistemde gerekli olan ve DBMS'nin uygulama ile aynı adres alanında çalışması için gerekliliklerle birlikte çok yüksek bir hata toleransı seviyesi, bizi yeni bir DBMS uygulamaya koymamızı sağlamıştır. Mnesia denir. Mnesia, Erlang programlama dilinde uygulanmaktadır ve çok sıkı bir şekilde bağlanmıştır ve hataya dayanıklı telekomünikasyon sistemlerinin uygulanması için gerekli işlevselliği sağlar. Mnesia, özellikle amaçlanan hedef dil olan, sembolik programlama dili Erlang'da yazılmış endüstriyel telekomünikasyon uygulamaları için özel olarak üretilmiş, çok kullanıcılı bir dağıtılmış DBMS'dir. Mnesia, tipik telekomünikasyon sistemleri için gereken tüm veri yönetimi konularını ele almaya çalışır ve normal olarak geleneksel veritabanlarında bulunmayan bir takım özelliklere sahiptir.
Telekomünikasyon uygulamalarında geleneksel DBMS'lerin sağladığı özelliklerden farklı ihtiyaçlar vardır. Şimdi Erlang dilinde uygulanan uygulamalar, genellikle geleneksel DBMS'ler tarafından karşılanmayan çok çeşitli özelliklerin bir karışımına ihtiyaç duyuyor. Mnesia, aşağıdakileri göz önünde bulundurarak gereksinimlerle tasarlanmıştır:
Hızlı gerçek zamanlı anahtar / değer araması
Özellikle işletme ve bakım için karmaşık olmayan gerçek zamanlı sorgular
Dağıtılmış uygulamalar nedeniyle dağıtılmış veriler
Yüksek hata toleransı
Dinamik yeniden yapılandırma
Karmaşık nesneler
Mnesia'yı diğer birçok DBMS'den ayıran, telekomünikasyon uygulamalarının tipik veri yönetimi sorunları göz önünde bulundurularak tasarlanmasıdır. Dolayısıyla Mnesia, çok hızlı gerçek zamanlı işlemler, yapılandırılabilir hata toleransı derecesi (çoğaltma yoluyla) ve kabiliyet kabiliyeti gibi telekomünikasyon uygulamaları için veri yönetimi sistemlerinde bulunan konseptlerle yapılan işlemler ve sorgular gibi geleneksel veritabanlarında bulunan birçok kavramı birleştirir. Sistemi durdurmadan veya askıya almadan yeniden yapılandırın. Mnesia, Erlang programlama diliyle olan sıkı bağlanması nedeniyle de ilginçtir; bu nedenle neredeyse Erlang'ı bir veritabanı programlama diline çevirmiştir. Bunun birçok faydası vardır, her şeyden önce, DBMS tarafından kullanılan veri formatı ile programlama dili tarafından kullanılan veri formatı arasındaki empedans uyumsuzluğunun,
MySQL'e karşı Mnesia, performans :
ejabberd, bazı * SQL veritabanı kullanırken, dahili Mnesia kullanıldığında olduğundan daha az hesaplama kaynağı kullanır. Çok fazla eşzamanlı kullanıcınız olduğunda (örneğin, 1000'den fazla) muhtemelen bu konuyla ilgileniyorsunuzdur. Birkaç eşzamanlı kullanıcı ile ejabberd'in CPU tüketimi önemsizdir, bu nedenle küçük sunucu yöneticileri harici bir SQL sunucusu ve veritabanı kurmayı umursamazlar.
CouchDB v. Mnesia, V. MySQL ve diğer Mnesia konuları :
Hemen aklıma gelen bir görüş, MySQL'in verilerini nasıl yapılandıracağımın bariz bir şekilde açık olmasına rağmen, Mnesia ve CouchDB için henüz daha iyi bir yaklaşımdan hala tam emin olamadığımdır. Şimdilik, burada daha belirgin noktalardan birkaçı:
Bir 'kayıt', kaç kez oynandığını açıkça gösteren 'rakamlar' alanına sahiptir. Bu MySQL'de gayet iyi, ancak bu alanı CouchDB için bir belgeye dahil edersem, bu sayı değiştiğinde her seferinde belgenin veritabanında yinelenen bir revizyonunu alacağım.
MySQL kayıtları, etiketleri ve aralarındaki bir bağlantı tablosundaki üç tablo düzeni (açık değilse komut dosyasına bakın) (en azından bana göre) açıkça doğru çözümdür, ancak bunu yapmanın birçok olası yolu vardır. Hem Mnesia hem de CouchDB'de ve ben sezgisel olarak cevaplara sahip olmadığımı biliyorum.
Kısacası, çok özel bir amaç için tasarlanmış ve amaca uygun şekilde tasarlanmış gibi görünüyor. Hiçbir veritabanı soyut olarak diğerine benzemez. Sadece gereksinimlerin kullanılması yoluyla uygunluk unsurları yaratılabilir.
Hayır, Mnesia'nın büyük miktarda veri için iyi olduğunu söyleyemem. Ets veya Dets'i arka uç olarak kullanmayı seçebilirsiniz . Ets'i seçerseniz, veritabanınız yalnızca bellekte ve çok hızlı olacaktır, ancak veriler kalıcı değildir. Verilerinizin kalıcı olmasını istiyorsanız (diske kaydedilmiş), 2GB sınırına sahip olan Dets'i kullanmanız gerekir , böylece veritabanınız 2GB'tan fazla veri tutamaz.
Riak NoSQL veritabanında kullanılan bir innostore gibi özel bir arka uç kullanabilirsiniz .
Mnesia'nın avantajları, dağıtılmış bir veritabanı olması, böylece birden fazla bilgisayarınız varsa, hataya dayanıklı sistemlerin yapılması çok kolaydır. Erlang'da kullanımı çok kolaydır, çünkü bir dil veritabanıdır ve "işlev gibi" davranır. Ayrıca, yalnızca bir önbellek gibi bir bellek içi veritabanına ihtiyacınız varsa, bu da süper hızlıdır.