Bu makale Marin Alcaraz tarafından Wootric blogu için yazılmıştır ve 29 Eylül 2016'da yayınlanmıştır.
Wootric'te ilk günden itibaren PostgreSQL'in büyük hayranlarıyız ve hala öyleyiz. Sağlam ve güvenilir, tam özellikli bir açık kaynak veritabanıdır ve çoğu durumda uygulamanız için tüm veri depolama ihtiyaçlarını karşılar. Öte yandan, NPS gibi müşteri geri bildirimlerini büyük ölçekte almak için çalışıyoruz, bu nedenle bu ölçekte çalışmaya hazır olmayan kod parçalarından ilk performans sorunlarını yaşamaya başlamamız an meselesiydi. Yılın başında. Ve kullanıcılar performans sorunlarından nefret eder. Zaman bu günlerde en değerli varlığımız ve kimse onu bir başvuru bekleyerek harcamak istemiyor, hah!
Geliştiriciler için bu farklı bir hikaye. Bir performans hatası, işini yapan bir algoritmayı ortaya çıkarır, ancak bu eskidir ve modası geçmek üzeredir; günleri sayılıdır. Yeni bir parlak kod parçası gelmek üzere ve arkasındaki büyük akıl sizsiniz… Yeniden düzenleme zamanı!
Wootric'i düzenli olarak kullanıyorsanız, kullanıcı segmentlerine aşina olabilirsiniz. Temel olarak , bir anket yanıtıyla bize iletilen her özel özellik , kullanıcılarınızı segmentlere ayırmak için bir filtre olarak kullanılabilir. Ve harika bir özelliğe yalnızca harika bir UX eşlik edebilir, böylece kontrol panelinde belirli bir öznitelik için gönderilen tüm değerlerin listesini görebilir, böylece bunları hızlı bir şekilde seçip filtreleri uygulayabilirsiniz.
Wootric'in ilk sürümlerinde, her 10 dakikada bir tüm özellikleri yeniden oluşturmak için bir arka plan komut dosyası çalıştırırdık, bu eskiden harika çalışırdı. Ancak veri hacmi artmaya devam ettikçe, bu komut dosyası daha fazla bellek gerektiriyordu ve birkaç ay sonra tamamlanması bir saatten fazla sürmeye başladı. Bu, filtrelerin çoğu değişmediğinde tüm veritabanını taradığından, açıkça verimsiz bir algoritmaydı. Anket yanıtları alındığında yeni değerler ekleyerek bunu aşamalı olarak inşa etmenin daha iyi bir çözüm olduğu bizim için netleşti. Sonuç: veritabanı trafiğini azalttı ve $'ı artık bu betiği çalıştırmamaktan kurtardı.
Algoritmalarımıza alıştıktan sonra, sıra veritabanı sorgularımızı optimize etmeye geldi. Bu karmaşık bir konudur ve bu makalenin kapsamı dışındadır. Büyük performans iyileştirmeleri elde ettik:
Tüm müşterilerimiz için gerçek zamanlı olarak yaptığımız bir şey olan Net Destekçi Puanını hesaplamak basit bir görev gibi görünebilir. Bu popüler müşteri sadakati metriğini belirlemek için, destekçi yanıtlarının yüzdesinden kötüleyen yanıtlarının yüzdesini çıkarmanız yeterlidir, tamam mı? Yüz milyon anket içeren bir tablodan binlerce yanıt için çalıştırmanız gerekene kadar bu gayet iyi çalışıyor, bunların hepsi bir web talebi kapsamında . İşler hızla kontrolden çıkabilir.
Bu soruna ilk çözümümüz, veritabanı sorgularını olabildiğince optimize etmekti ve artık mümkün olmadığında bir şeyleri önbelleğe almaya başladık. İlk yaklaşım, hesaplama sonuçlarını önbelleğe almaktı. Ancak, kullanıcılar sadece birkaç tıklamayla hesaplamanın tarih aralığını değiştirebilirler, bu nedenle günlük sonuçları içeren bir önbellek oluşturduk. Bununla ve önbellekleri sıcak tutmak için uygun önbellek kuralları ve arka plan işleri ile sorunu bir süreliğine çözmeyi başardık.
Ancak daha sonra, segmentasyon özelliğimiz bir meydan okuma sundu. Herhangi bir özel özellik kombinasyonuna sahip kullanıcı grupları için NPS'yi hesaplama yeteneği sunuyoruz. Olasılıkların sayısı hızla katlanarak artıyor. Tüm bu önbellekleri oluşturmak pratik veya verimli değildir. Bu nedenle, özel özniteliklerin "şemasız" doğasını destekleyen ancak yine de hızlı sorgulara izin veren bir şeye ihtiyaç duyduk.
Oldukça basit bir kuruluma sahip açık kaynaklı bir arama motoru olan Elasticsearch ile bu sorunlara mükemmel çözümü bulduk : bir anket Postgres'te saklandıktan sonra, onu daha sonra sorgulamak için en uygun biçimde depolandığı ES'ye göndeririz. Dizin oluşturma işlemi, bir veritabanına yazmaya kıyasla yavaştır, bu nedenle bununla başa çıkmak için arka plan işlerini kullanıyoruz. Eşlemeleri tanımlayarak belgenin ES'de nasıl saklanacağına karar verebilirsiniz ve iş mantığınız büyümeye devam ettikçe, her sorun için belirli eşlemelere sahip birden çok dizine sahip olabilirsiniz. Şema içermeyen özel özelliklerimizle başa çıkmak için dinamik şablonlar da kullanıyoruz .
ES o kadar popüler hale geldi ki, neredeyse tüm dillerin sunucularla konuşmak için bir istemci kitaplığı var. Ancak, başlamak için yalnızca küçük bir dizi özelliğe ihtiyacımız vardı. Resmi belgelerde JSON kodlu nesnelerle HTTP isteklerini kullanarak nasıl bağlanılacağına dair net örnekler var, bu yüzden kendi kitaplığımızı oluşturmaya karar verdik. Sadece birkaç isteği işleme mantığı da dahil olmak üzere çok küçük başladı ve daha fazlasına ihtiyacımız olduğu için yinelemeye devam ettik.
Çok. Burada , Ruby ile yazılmış ve başlamanız için yeterli bitiş noktasına sahip kütüphanemizin basitleştirilmiş bir sürümünü bulabilirsiniz . Onu kullanmaktan ve üzerine inşa etmekten çekinmeyin.
Wootric panosu, verileri birkaç farklı şekilde görüntüler. ES'yi, Anlık Görüntü sekmesinden başlayarak, ardından Geri Bildirim, ardından Etiketler ve son olarak Trendler'den başlayarak aşamalı olarak benimsedik. Bahsettiğimiz müşteri panosunun görselini burada görebilirsiniz . Bu süre zarfında yeni özelliklere de odaklandığımızdan bu yana tüm süreç yaklaşık 3 ay sürdü, ancak 1. günden itibaren sonuçları görmeye başladık.
Bu doğru, ortalama 1700ms yanıt süresinden 61.1ms'ye çıktık!
Aynı zamanda, taleplerin hacmi artmaya devam etti, bu yüzden hiçbir şeyi değiştirmemiş olsaydık ne olacağını düşünmek korkutucu:
Ancak sonuçların tamamı isteklerin yanıtlanma süresi ile ölçülemez. Son görevimiz olan Trendler sekmesi, arka planda karmaşık bir önbelleğe alma algoritmasında çalışırdı. Bir kullanıcı belirli bir süre ve filtreler için trend grafiğini görmek istediğinde, karmaşık bir arka plan işi tetiklendi ve gösterge tablosu API'yi sorgulamaya devam ederek işin tamamlanmasını bekledi. Elasticsearch'te Date Histogram toplamasını öğrendiğimizde , tüm bu algoritma tarihe geçti.
İşte birkaç senaryoda her iki algoritmanın hesaplama süresinin bir karşılaştırması:
Uygulama performansının ayarlanması karmaşık bir konudur. Bu blog yazısında, bizim için neyin işe yaradığına bağlı olarak birkaç soruna ve çözüme değindik. Sorunları farklı şekillerde düşünerek, Postgres sorgularını optimize ederek ve önbelleğe alarak harika sonuçlar elde ettik, ancak Elasticsearch'ü tanıtmak şüphesiz en büyük kazançtı. Performansı artırmamıza, paradan tasarruf etmemize ve kodu temizlememize yardımcı oldu. Git'in ne dediğine bakın:
Çevrimiçi yaratıcı web sitenizi başlatmak için en iyi ücretsiz tasarım şablonunu arzuluyorsanız, burada mevcut tasarımcılar, tasarımcılar, tasarımcılar ve tasarımcılar için en iyi ücretsiz tasarımlar, tasarımcılar ve tasarımcılar için harika bir liste bulabilirsiniz. potansiyel müşterilerinizi etkilemek veya profesyonel tasarım alanınızda yeni bir yaratıcı iş bulmak istiyorsanız. iPortfolio iРоrtfоliо, modern bir alternatif СV ve роrtfоliо Ücretsiz HTML şablonlarıdır.
Karusel, içeriğin birçok bölümünü aynı alanda görüntülemek söz konusu olduğunda çok önemlidir. Örneğin, başarılı bir çevrimiçi mağazanız olduğunu varsayalım.
Bu, harika android mimarisi serisinin 1. bölümüdür. Bölüm 2'yi burada bulabilirsiniz: Harika android mimarisi: Özet (Bölüm 2 - MVVM) Genel Bakış Bu seri, 2020'de herhangi bir Android Mühendisi için en önemli üç bilgi alanı olduğunu düşündüğüm şeylerin bir özetini içerecek.
Geçenlerde RigUp'ta 2. hackathonumuzu gerçekleştirdik ve ekibim müşteri kategorisinde birinci oldu! Çözümümüz özel kazıyıcılar, kuyruklar, veri ETL'si ve elde edilen verilerin sorgulanmasını içeriyordu. Ardından, bu verileri görüntülemek için mükemmel görselleştirmeler sağlamak üzere bir React uygulaması yazdık.
Bir Excel elektronik tablosu ile JSON biçimi arasında yaygın bir dönüştürme ihtiyacı vardır. Bunu ayarlamak, en iyi koşullar altında bile normalde oldukça zahmetli olacaktır.
Bu roman benim için çok güzel bir keşifti. Bu işi bulana kadar, e hakkındaki bilgim.
Dwayne Johnson, uzun zamandır birlikte olduğu sevgilisi Lauren Hashian ile 2019 yılında evlendi. İşte nasıl tanıştıkları ve bu günlerde hayatlarında neler olup bittiği.
'90 Day Fiancé' yıldızı Steven Johnston, Alina ile olan hikayesinin korkutucu olmaya başladığını ve annesinin izlememesi gerektiğini açıkladı.
Netflix ve Sony, son 'Lady Chatterley's Lover' filminin başında. Joely Richardson ve Faye Marsay kadroya yeni katıldı.
TvN, Yoo Jae-Myung'un bir dizi cinayeti çözen bir dedektif olarak oynadığı 'Hometown' adlı yeni bir suç-gerilim K-dramı yayınlayacak.
Şabat, her Cuma gün batımından Cumartesi gecesine kadar gerçekleşen, Yahudi yaşamının merkezinde yer alan tatildir. Ama nedir ve nasıl gözlemlenir?
Amerika Birleşik Devletleri Başkanı olmak için en az 35 yaşında olmalısınız. Peki buna yaklaşan var mı?
Colorado, Granby'deki 2004 olayı, kasabanın yarısını yok etti. Şimdi 17 yıl sonra, kütüphaneyi ve belediye binasını çökerten tankın pilotu olan Marvin Heemeyer, hükümet karşıtı aşırılık yanlılarının kahramanı oldu.
HowStuffWorks'teki eğlenceli matematik oyunumuzla kayıp sayıyı bulabilecek misiniz bir bakın!
Bir NFL yan hakemine baktığımda "biftek" düşünüyorum. Bence “patateslerin parçalarını yığmak.
Bu görüntü yasal nedenlerle kaldırıldı. Eski Başkan George W.
Fotoğraf Kredisi: Christian Petersen/Getty Olanların üzerinden bir yıldan fazla bir süre sonra, Diamondback'lerin Shelby Miller ile takası, eski genel müdür Dave Stewart yönetiminde organizasyonun işlev bozukluğunun bir tür kolay sembolü olarak hizmet etmeye başladı. Ancak, küçüklerde uzun süreler içeren gerçekten sefil bir 2016'nın ardından, Miller, bu yılın başlarında, şimdiye kadar sahip olduğu en iyi bahar antrenman performansı ve muhteşem olmasa da mükemmel bir şekilde hizmet veren sezon başlangıcı ile kefaret için bazı adımlar attı.
Bu resim yasal nedenlerle kaldırıldı. GÜNCELLEME, 3/03, 10:12: The Intercept, Pazartesi günü Göçmenlik ve Gümrük Muhafaza dairesinin göçmenleri izlemek için özel Facebook verilerini kullandığını iddia eden raporunda önemli bir düzeltme yayınladı.
Alabama, Mobile'dan Jereme Lamond Jones, 1. Derece Cinayetle suçlandı ve 1.000.000 $'lık bir tahvili var.
Afgan savunucuları, Taliban'ın yeniden iktidara gelmesiyle birlikte kadınlar ve kızlar için başarıları, zorlukları ve korkuları anlatıyor
Küresel Kıdemli Papaz Houston bir e-postada "Kilise ailemizin şeffaflık adına bilmesini sağlamanın önemli olduğunu düşündüm ve bunu doğrudan benden duymanızı istedim" dedi.
Penelope Cruz İspanya'daki San Sebastian Film Festivali'ne gelirken, Sarah Jessica Parker New York'ta Ve Aynen Böyle... filmlerini çekiyor. En sevdiğiniz yıldızların neler yaptığını görün