İşlemleri parasal değerleri ve para birimleri ile saklamamız gerektiğini varsayalım. Herhangi bir yuvarlama sorununa tahammül edemediğimiz için akla gelen ilk veri türü doğal olarak sayısaldır ve bu da tablonun şöyle görünmesini sağlar:
13,67 ABD Doları tutarındaki bir işlem, tutarı "13,67" ve para birimi "USD" olacak şekilde tek bir işlem kaydı olarak saklanacaktır .
Sorun çözüldü? Öyle düşünmüyoruz, çünkü resmi belge şöyle diyor:
(sayısal için) Gerçek depolama gereksinimi, her dört ondalık basamak grubu için iki bayt artı üç ila sekiz bayt ek yüktür.
Daha fazla basamaklı sayılar için sabit boyutlu tam sayılardan daha fazla yer kaplayabilir gibi görünüyor. IDR ile uğraştığımız için bundan etkilenebiliriz! (Bilginize, yazı yazarken 1 USD 14.300 IDR civarındadır)
Ancak, sayısal değerler üzerindeki hesaplamalar, tamsayı türlerine veya sonraki bölümde açıklanan kayan nokta türlerine kıyasla çok yavaştır.
Çekici gelmiyor!
Diğer çözüm, büyüteçli tam sayıdır (veya büyük tam sayıdır) ve tablolar buna benzeyecektir.
13,67 ABD Doları tutarındaki aynı işlem, büyütülmüş_tutar "1367" ve para birimi "USD" olacak şekilde tek bir işlem kaydı olarak ve aşağıda gösterildiği gibi para birimi "USD" ve büyüteç "100" olan büyüteçlerde bir kayıt olarak saklanacaktır .
Daha basit bir ifadeyle, bunu 13,67 dolar yerine 1367 sent olarak saklıyoruz.
Görünüşe göre, bu da mükemmel değil, menzil sınırlıdır (genellikle yeterince büyük olmasına rağmen) ve daha da önemlisi, en iyi değer bir tür büyüteç tarafından kilitlenir, örneğin, yukarıdaki masa destek değirmenlerini yapmak için , bir göç gerçekleştirmek. Artı, geliştiricilerin değerin büyütülmüş olduğunu her zaman hatırlamaları gerekir (bu nedenle, büyütülmüş_tutar alanını bir hatırlatıcı olarak adlandırıyoruz ) .
Ama daha hızlı.
Basit ve prangasız sayısal uygulamanın ticaretine değip değmeyeceğine karar vermek için yanıtlamamız gereken soru budur. Bazı kıyaslamalara gidiyoruz!
Donanım:
PostgreSQL sürümü: 13 (postgres: 13-alpine docker görüntüsü, Mac için Docker Desktop 4.4.2 (73305))
Tohumlama komut dosyası:
CREATE TABLE IF NOT EXISTS numbers ( id BIGSERIAL constraint numbers_pk primary key, integer INT NOT NULL, biginteger BIGINT NOT NULL GENERATED ALWAYS AS ( integer ) STORED, numeric_free NUMERIC NOT NULL GENERATED ALWAYS AS ( integer ) STORED, numeric_coarse NUMERIC(19) NOT NULL GENERATED ALWAYS AS ( integer ) STORED, numeric_fine NUMERIC(19, 5) NOT NULL GENERATED ALWAYS AS ( integer ) STORED ); INSERT INTO numbers (integer) SELECT RANDOM() * 10000 :: int FROM generate_series(1, 10000000);
Tek bir toplamdan sapmayı önlemek için iki set test sorgusu kullandım:
SELECT SUM(integer) FROM numbers; SELECT SUM(biginteger) FROM numbers; SELECT SUM(numeric_free) FROM numbers; SELECT SUM(numeric_coarse) FROM numbers; SELECT SUM(numeric_fine) FROM numbers; SELECT AVG(integer) FROM numbers; SELECT AVG(biginteger) FROM numbers; SELECT AVG(numeric_free) FROM numbers; SELECT AVG(numeric_coarse) FROM numbers; SELECT AVG(numeric_fine) FROM numbers;
Sonuç aşağıdaki gibidir (milisaniye cinsinden ortalama sorgu yürütme süresi).
Bundan, kesinlik ve ölçekten bağımsız olarak sayısal türlerin tamsayı uygulamalarından önemli ölçüde (yaklaşık %50 ila %70) daha yavaş olduğunu öğrendik.
Buna dayanarak tamsayı+büyüteç yaklaşımını benimsedik.
Umarım yardımcı olur!
Bilinç nedir? Yüzyıllardır filozofların ve bilim adamlarının kafasını karıştıran bir sorudur. Bazıları bunun bedenlerimizden bağımsız olarak gerçekten anlayamadığımız geçici bir şey olduğunu söylüyor.
Yıllık ortalama 154 bin dolar maaş ve istikrarlı iş büyümesi ile şimdi blok zinciri geliştirmeyi öğrenmek için ideal zaman. Blok zinciri teknolojilerini oluşturmak ve geliştirmek için blok zinciri geliştiricileri, bilgisayar ağı, kriptografi, algoritmalar ve veri yapıları dahil olmak üzere çeşitli beceriler kullanır.
Tarih boyunca insanlar yalnızlık veya ilham aramak ya da ruhsal farkındalıklarını derinleştirmek için vahşi doğaya yalnız gittiler. Yerli Amerikalılar genellikle genç erkekleri vizyonlarını aramak için haftalarca vahşi doğaya gönderirdi (Farb 1967).
1949 Amerika'da bir dizi olay oldu; Los Angeles ilk kar yağışını kaydetti, 1.200 kiloluk bir inek Oklahoma'da bir siloya sıkıştı ve ABD'de hiçbir Afrikalı-Amerikalının linç edilmediği ilk yıldı. Aynı zamanda FBI'ın En Çok Arananlar listesi fikrinin ortaya çıktığı zamandı.
Mars, Uranüs ve Kuzey Düğümü, 1 Ağustos 2022'de 18 derecede Boğa burcunda kavuşuyor. Yataklarımız yanarken nasıl uyuruz?-Gece yarısı yağı Yılın en önemli astrolojik yönlerinden biri olan Mars ve Uranüs'ün kaderin Kuzey Düğümü ile kavuşumu, gerçek bir aciliyet hissinin eşlik ettiği büyük bir uyandırma çağrısıdır.
Bu ay tüm yeni abonelerimize ve yazarlarımıza sıcak bir karşılama; sürülerinizde ortaya çıkıyorsunuz ve bunun için size teşekkür ediyoruz. Burada harika bir topluluk oluşturuyoruz ve yorumlarınızı ve makalelerinizi okumak harika.