100.000 civarında veri satırım var. Bu verileri bir metin dosyası biçiminde saklarsam, bir Excel dosya biçiminde sakladığımdan daha fazla alan harcar. Neden?
100.000 civarında veri satırım var. Bu verileri bir metin dosyası biçiminde saklarsam, bir Excel dosya biçiminde sakladığımdan daha fazla alan harcar. Neden?
Yanıtlar:
xlsx
Biçimi , modern Excel tarafından kullanılan aslında sıkıştırılmış bir formattır. Belli bir yapıda metin (XML) dosyalarını içeren bir ZIP arşividir.
Düz metin dosyanızı benzer bir ZIP sıkıştırma aracıyla sıkıştırırsanız, benzer dosya boyutlarını elde etmelisiniz.
Ek olarak , yorumlarda Bradley Uffner ve Morgen tarafından belirtildiği gibi , Excel aynı dizeleri tekilleştirecek ve yalnızca bir kopyasını saklayacaktır. Böyle bir yöntemin kesin kazanımlarından emin değilim ve bu, veri kümenize bağlı olacaktır, ancak basit zip sıkıştırması muhtemelen sizi en çok oraya götürecektir. 1
9.1.3 Fiziksel Paketler
Her Office Açık XML belgesi ZIP arşivi olarak uygulanır.
1 Tahminimce bu veri tekilleştirme, çok sayıda çalışma sayfanız olduğunda en etkilidir, çünkü zip sıkıştırması bir arşivdeki her bir dosyaya bağımsız olarak uygulanır ve bir seferde yalnızca sınırlı bölümler üzerinde - tüm dizeleri tek bir dosyada bir arada depolayarak sonraki sıkıştırma için bazı faydası olmalıdır. Daha pratik olarak, düz metin biçiminiz yine de tek bir dosyadaysa, muhtemelen küçük bir fark olacaktır.
.zip
. Spesifikasyon da mevcuttur, ancak oldukça kuru okuma yapar.
Verilen cevap doğrudur, çünkü verilerinizi xml olarak depolayan Excel'e bağlıdır. Bundan dolayı, verilerinizi verimli bir şekilde sıralamanın dosya boyutunu da azaltacağı kaynaklanmaktadır. Kendiniz test edin - gibi verilerinizin olduğunu söyleyin
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Yalnızca C'ye göre sıralarsanız (yalnızca tüm veya neredeyse tüm benzersiz değerlere sahip bir sütun), o zaman B'nin aynı değerleri bitişik olmaz. Excel'in xml dosyasında şöyle görünür:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
B'ye göre sıralarsanız (ortak değerlere sahip bir sütun), aynı değerler bitişiktir. Excel'in xml dosyasında şöyle görünür:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Bu uzun dize aynı ve bitişik olduğundan, Excel, insanları listeler yazdıklarında olduğu gibi bunları bir araya toplayabildiğini ve yukarıdaki satırın bir kısmını tekrarlamak için aynı şeyi tekrar yazmak yerine tırnak işaretleri yazdıklarını bilir. Araştırmamda paylaşılan bir dize sözlüğüne dair herhangi bir kanıt bulamadım - tekrarlanan alan değeri yerine sadece bu girintiyi.
Sadece 11 eyaletteki 250.000 müşteriden oluşan posta listelerim vardı ve her kayıtta aldıkları teklifi belirleyen iki karakterden biri olan bir alan vardı. Çalışanlarımız, nedense, konuşmacı olarak sokak adreslerine göre insanlara bakmaya alışkınlardı, bu yüzden önce teklife, ardından devlete başvurduğumda sokak numarası sütununda, sonra sokak adında, şehir vb. posta kodu, şehir, cadde adı, cadde numarası ve nihayet adres satırı-2, dosya boyutunu inanılmaz derecede düşürdü. Neler olup bittiğini görmek için sıralanan dosyadaki paketlenmemiş xml dosyasını inceledim, ve yukarıdakileri ne düşündüğümü gördüm. 5'ten fazla karakterden oluşan birden fazla alan varsa, ancak değerler sınırlı bir küme (örneğin, 'çözüldü', 'reddedildi', 'onaylandı', vb.
3.14159265359 gibi bir numaranız varsa, bunu bir metin dosyasına kaydetmek için 13 bayta ihtiyacınız vardır; Bu sayıyı kayan nokta olarak kaydederseniz, yalnızca 4 bayta ihtiyacınız vardır.
xls
(BIFF) için geçerli olsa da , bunu sanmıyorum xlsx
. xlsx
tüm verileri, sayıların ikili kodlamasını gerçekleştirmeyen XML dosyalarında saklar - bunlar metin dizelerine dönüştürülür ve saklanır. Hala şartnamenin ilgili bölümünü bulmaya çalışıyorum, ancak deneysel testim (yani kaydedilmiş bir belgeyi çıkarmak) 1.123
kelimenin tam anlamıyla XML'de 5 karakterli bir dizi olarak saklandığını gösteriyor .
c
(Hücre) hücreler kendi veri deposu olduğunu göstermektedir v
tanımlanan, etiketleri ECMA-376-1: 2016 § 18.3.1.96 v
(Hücre Değeri) derler bu element için olası değerleri ST_Xstring basit tip (§22.9.2.19) ile tanımlanır. - <v>28086.3541666667</v>
Verilerin açıkça bir dizge olarak depolandığı yerler gibi örnekler sunarlar .
xlsb
büyük sayfalar için şiddetle tavsiye edilen durumdur