SORU
8 Mart 2012, PERŞEMBE


Temel veri yapıları Redis ne için kullanılır?

Kesin bir liste: iki soruya cevap vermeye çalışıyorum

  1. Temel veri yapıları Redis ne için kullanılır?
  2. Ve/dezavantajları/ana avantajları her tip durumlarda kullanmak nedir?

Yani, aslında listeler bağlı listeler ile uygulanacağı Redis okudum. Ama diğer türlü, herhangi bir bilgi alana kadar güçlü değilim. Eğer biri bu soruyu takılmaları ve yüksek bir düzeyde veya farklı veri yapıları değiştirme erişim artılarını ve eksilerini özeti değil de, tam bir liste olurduen iyi belirli türleri kullanmareferans olarak.

Özellikle, her türlü anahat arıyorum: string, list, set, zset ve karma.

Oh, bu maddede, diğerleri arasında, şimdiye kadar baktım:

CEVAP
8 Mart 2012, PERŞEMBE


Eğer Redis iç sen ilgilenen varsa . sorunuzu cevaplamaya çalışacağım, ama ilk başta tuhaf görünebilir bir şey ile başlayalım: ^strong>özen göstermesi gerekirveri türleri DAHİLİ olarak uygulanır. Bunun için basit bir nedeni vardır: her Redis operasyon bulacaksınız zaman karmaşıklığı belgeleri, varsa küme işlemleri ve zaman karmaşıklığı, tek şey ihtiyacınız olduğu hakkında bir ipucu bellek kullanımı (ve çünkü yaptığımız birçok iyileştirmeler bu bağlı olarak değişiklik gösterebilir verileri, en iyi şekilde olsun bu son rakamlar yapıyor bir kaç önemsiz gerçek dünya testleri.

Ama madem sordun, burada her Redis veri türü temel uygulamasıdır.

  • Dizeleri(konuşma sınıfları) işlemleri ekleme ayırmaları için para vermiyoruz ki C dinamik bir dize kitaplığı kullanılarak uygulanan. O bu şekilde(N), ikinci dereceden davranış yerine örneğin ekler.
  • Listelerbağlı listeler ile uygulanmaktadır.
  • AyarlarveKarıştırırolan hash tabloları uygulanır.
  • Sıralanmış ayarlarskip lists (dengeli ağaçlar tuhaf bir tip) kuruldu.

Ama listeleri, ayarlar ve sıralanmış setleri öğe sayısı ve en büyük değer, boyutu küçük olduğunda, çok daha kompakt farklı bir kodlama kullanılır. Bu kodlama farklı türleri için farklı, ama genellikle O zorlar verilerin kompakt bir leke olduğunu özelliğine sahiptir(N) her işlem için tarama. Küçük nesneler için bu biçimi kullanmak beri bu bir sorun değildir; küçük bir O(N) tarama blobönbellek habersizçok hızlı ve çok fazla unsur vardır ne zaman bu kadar pratik konuşma kodlama otomatik olarak yerel kodlama (liste, karma ve benzeri bağlı) geçti.

Ama soru gerçekten sadece, senin olayın iç değildiNe amaçla kullanılacak?.

Dizeleri

Bu her türlü temel türü vardır. Bir Liste dizeleri, dizeleri bir dizi, ve benzeri bir liste olduğundan dört türlerinden biri olsa da, aynı zamanda karmaşık türleri temel türü vardır.

Redis bir dize zaten kodlanmış veri dönüştürme önlemek istediğinizde HTML sayfası, ama aynı zamanda saklamak istediğiniz tüm açık senaryolarda iyi bir fikirdir. Eğer JSON veya MessagePack varsa örneğin, sadece dizeleri gibi nesneleri depolayabilir. Redis 2.6 bile nesne bu tür bir sunucu tarafı Lua betiklerini kullanarak işleyebilirsiniz.

Dizeleri bir başka ilginç kullanım Redis ihracat bayt veya tek bir bit bile rastgele aralıkları komutlara beri bitmap ve bayt genel rasgele erişim diziler. Örneğin kontrol this good blog post: Fast Easy real time metrics using Redis.

Listeler

Listeler listesini sadece uç dokunma ihtimali zaman iyidir: yakın kuyruk veya yakınlarında kafa. Listeler rastgele erişim yavaş olduğundan falan düzenliyor, çok iyi değil, O(N). Listeler çok iyi kullanan bir döngü, aynı kaynak ve hedef ile RPOPLPUSH "" öğeleri bir yüzük. döndürmek için kullanarak düz kuyruklar ve yığınlar, ya da işleme öğelerdir

Listeler sadece burada N öğe maskeli bir grup oluşturmak için istediğimiz zaman da iyigenelliklebiz N küçük olduğunda sadece üst veya alt öğeleri erişim ya.

Ayarlar

Ayarlar sıralanmamış veri toplama, iyi ki onlar her zaman öğelerinden oluşan bir koleksiyonu var ve çok önemli, çok hızlı bir şekilde toplama varlığı ya da boyutu kontrol edin. Ayarlar hakkında başka serin şey ya da rastgele öğeleri (SRANDMEMBER ve SPOP komutları) bakmak patlatmak için destek.

Ayrıca iyi ilişkiler, örneğin, "kullanıcı X arkadaşlar Ne içindir?" ve benzeri. temsil setleri Ama bu tür şeyler için başka İyi Veri Yapıları göreceğiz gibi ayarlar sınıflandırılmaktadır.

Ayarlar destek karmaşık işlemler gibi kavşaklar, sendikalar ve benzeri, Peki bu iyi bir veri yapısı kullanarak Redis bir "hesaplama" ne şekilde, ne zaman veri ve istediğiniz dönüşümleri gerçekleştirmek için bu verileri elde etmek için bazı çıktı.

Küçük ayarlar çok verimli bir şekilde kodlanır.

Karıştırır

Karma nesneler, alanlar ve değerleri oluşan temsil etmek için mükemmel bir veri yapısı vardır. Karma alanları da atomik artan HİNCRBY kullanılarak yapılabilir. Kullanıcılar, blog yazıları, ya da başka bir tür gibi nesneler varsamaddekarma JSON veya benzeri muhtemel yolu ise kendi kodlama kullanmak istemiyorsun diye gidecek.

Ancak, küçük sağlamalarının çok verimli çok hızlı bir şekilde ve atomik için Redis sorabilirsiniz, SET ya da artış Redis özel alanlar tarafından kodlanmış olduğunu unutmayın.

Karma da bağlantılı veri yapıları, kaynaklar kullanarak temsil etmek için kullanılabilir. Örneğin onay yorum lamernews.com uygulama.

Sıralanmış Ayarlar

Ayarlar sınıflandırılmaktadırsadece diğer veri yapıları, listeler ayrıca korumak için öğeleri emretti. Sıralanmış ayarlar ile güzel şeyler bir dizi yapabilirsiniz. Örneğin, her türlü olabilirÜst Bir Şeyweb uygulamanızda listeler. Sayfa görüntüleme, ne top, ama tek Redis bir örneği tarafından puan yüksek mevkilere tarafından üst düzey kullanıcılar ekleme ton destek ve üst elemanları almak saniyede işlemleri.

Sıralanmış ayarlar normal ayarlar gibi, ilişkileri tanımlamak için kullanılan olabilir, ama onlar da öğeleri listesinde ilerlemek için ve sipariş hatırlamak için izin verir. Eğer kullanıcı arkadaşlar hatırlamıyorsam sıralanmış bir set örneğin, X kolayca kabul dostluk sırayla onları hatırlıyorum.

Sıralanmış ayarlar öncelik sırası için iyidir.

Sıralanmış ayarlar ekleme, çıkarma, ya da listenin ortasından aralıkları alıyorum her zaman hızlı ve daha güçlü bir liste gibi. Ama daha fazla bellek kullanırlar ve(log(N)) veri yapıları O.

Sonuç

Bu yazı biraz bilgi verilir umarım, ama çok daha iyi http://github.com/antirez/lamernews lamernews kaynak kodunu indirin ve nasıl çalıştığını anlamak önemlidir. Redis birçok veri yapıları Lamer Haber içinde kullanılan ve belirli bir görev çözmek için ne hakkında birçok ipucu vardır.

Dilbilgisi ve yazım hataları, burada gece yarısı sonrası inceleme için çok yorgun;) için özür dilerim

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • LivestrongWoman

    LivestrongWo

    1 Aralık 2011
  • Marina and The Diamonds

    Marina and T

    8 Temmuz 2008
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007