2011-05-23 30 views

cevap

28

Ben leveldb ve Redis o noktaları arasındaki fark noktalar üzerinde olmasına rağmen ben colum ölçütleri ile biraz katılmıyorum buluyorum.

Eşzamanlılığa ihtiyacınız var mı? Redis ile giderdim. Bunu söylüyorum çünkü Redis'in kod yazması için yazılmış bir kodu var. Eşzamanlılığı ele almak için iyi yazılmış Diğer Kişilerin Kodunu kullanabileceğim her zaman, o kadar iyi. Çok iş parçacıklı uygulamalar demek istemiyorum, aynı sistemde olsun ya da olmasın, çoklu süreçler kavramını da buna dahil ediyorum. O zaman bile, çok iş parçacıklı bir uygulamada kilitleme yazma ve hata ayıklama gerek yok gözlerimde büyük bir avantajı vardır.

Uygulama içinde tamamen kendi kendine yeterli olmasını ister misiniz? Bir kütüphane olduğu için leveldb ile devam edin. Sadece bir k/v'dan daha fazlasına mı ihtiyacınız var? Redis ile git.

Sadece daha iyi takım elbise hakkında yorum yapmak için Riak veya TT'de yeterince akıcı olmadığımı düşünürdüğüm için leveldb veya Redis yönüyle ilgili yorum yapıyorum.

Kısacası, tek iş parçacıklı bir uygulamada kalıcı anahtar-değer deposu arıyorsanız, o zaman leveldb listeniz arasından seçim yapma seçeneğidir (başka bir şey Tokyo kabinesi veya iyi bir BerkleyDB veya hatta sqlite olabilir). Fakat bundan daha fazlasını istiyorsanız, diğerlerinden birini seçin.

[değiştir: updated explanation wrt. Sadece çünkü bu (önemli) ayrım yapılmış görmüyorum önceki cevapların hem de bu eklemek

+3

Analizinize katılıyorum, emin değilim. Lütfen [Hacker News thread] bölümüne bakın (http://news.ycombinator.com/item?id=2526032). Hem eşzamanlılık hem de hız leveldb açısından üstün görünüyor, ancak hala objektif çalışmalar arıyorum. – rafidude

+1

Sanırım buna bağlı * neden * eşzamanlılık ile gidiyorsunuz ve buna nasıl ihtiyacınız var. Redis'in, eşzamanlı olmamakla birlikte eşzamanlılık ile daha hızlı olacağını savunmuyordum (bunu düzelteceğim). Fakat "eşzamanlılığı ele almak için kod yazmam gerekmiyor" bakış açısıyla, bunu önemli bir faktör olarak görüyorum. –

+0

Vay, aşağıya oy açıklaması mı? –

11

farklar: LevelDB "hızlı bir kalıcı anahtar değer deposuna uygulayan bir kütüphane" ise

  • Redis, bir sunucudur. Bunun için Redis ile sunucuyu kontrol etmelisiniz. Leveldb ile veritabanı diskte saklanır, bu bellekte saklanan Redis'den çok daha yavaş çalışır.
  • Leveldb sadece anahtar/mağaza sunmaktadır. Redis de bu vardır, ama aynı zamanda çok daha fazla işlevleri vardır ve

benzerlikler bulunmaktadır: üzerinde birini seçmek

  • Her ikisi de var Anahtar/Mağaza yöntemleri

nedenleri başka bir

Eğer bir C/C++ uygulaması yapıyorsanız, leveldb gitmek için yoldur. Sadece mysql olarak ağır bir kaynak olmayan bir veri tabanına ihtiyacınız var. Leveldb, kod düzeyinde erişim sağlarken, redis ile sunucuyla iletişim kurması gereken bir arayüze ihtiyacınız var. Başka bir uygulamada, Redis gitmek için bir yoldur. Birden fazla uygulamanın erişebileceği gerçek bir sunucuya sahip olmakla kalmaz, diske, kümelere, listeye, karmaşaya yazma gibi başka özellikler de elde edersiniz ve devam eder.

+2

> * Hafızada saklanan redis * Okuyuculara not, biraz yanıltıcıdır. Disk * ve * bellekte tutulur. Redis'te saklanan veriler, aksine, memcached değil, uçucu değildir. –

+0

@CrescentFresh Ancak, bellek parçasını tekrardan çıkarmak imkansız, değil mi? Kişi, kalıcılık için birden fazla GB veri saklamak istiyorsa ve bunu kapsayacak koya sahip değilse, o zaman redis kullanılamayacak bir şey değildir, değil mi? – superhero

+0

@Erik: Sadece kapağı kapatmak için ram'a ihtiyacınız yok, ama arka plan tasarrufu için fazladan ihtiyacınız var. Sorunuz ve bu yorum tam olarak [SSS] 'de açıklanmıştır (http://redis.io/topics/faq). –

36

eşzamanlılık] ...

  • Redis: Bir veritabanı sunucusu mı. Özel bir ikili protokolle (genellikle istemci kütüphanesi aracılığıyla) iletişim kurarsınız.
  • LevelDB: Anahtar değer deposu uygulayan bir kitaplıktır. C++ API directly numaralı telefonu arayarak bununla iletişim kurarsınız. Eğer SQLite ve ne kadar popüler istemci uygulamaları için gömülü bir DB (I Android ve iOS gemiyi bunu hem inanmak) daha sonra LevelDB gibi bir şey sığar yere bakar.

    hayal olarak haline gelmiştir aşina değilseniz

karmaşık bir PIM uygulaması yazıyordunuz, belki de ofisdeki bireysel bilgisayarlara yüklenmek için bazı kurumsal adres defteri yöneticisi. Tüm bu verileri, uygulamanızın içinde yazdığınız/ayrıştırdığınız XML veya JSON'da saklamak istemezsiniz - eğer yapabiliyor olsaydınız, daha kolay erişim kalıplarına sahip olmak için bir DB'de saklarsınız.

Ayrıca, yerel bir kopyasını Redis'e yüklemek ve yüklemek zorunda kalmak istemiyorsunuz, sadece rastgele bir bağlantı noktasında çalışıyor, böylece bağlanabiliyorsunuz ... doğrudan ve doğal olarak arayabileceğiniz bir DB istiyorsun. senin app ve "tel üzerinde" iletişim hakkında endişe ... sen bir istemci sadece app gerek yok ağ-gözü şeyler olmadan bir DB ham bağırsakları istiyorum.

Bu, LevelDB'nin bulunduğu yerdir.

Farklı bir iş için farklı bir araçtır.

+2

Redis, Unix alan soketleri üzerinde çalışabilir. Bunu, önyüklemeyi hızlandırmak için yerleşik bir aygıtta yaptım (Redis'i başlatmak için ağa gerek yok). – tjameson

+0

herhangi bir kıyaslama Redis vs MonetDB veya VoltDB veya RocksDB? – skan