Tôi có khoảng 100000 hàng dữ liệu. Nếu tôi lưu trữ dữ liệu này ở định dạng tệp văn bản, sẽ mất nhiều dung lượng hơn so với khi tôi lưu trữ dữ liệu ở định dạng tệp Excel. Tại sao vậy?
Tôi có khoảng 100000 hàng dữ liệu. Nếu tôi lưu trữ dữ liệu này ở định dạng tệp văn bản, sẽ mất nhiều dung lượng hơn so với khi tôi lưu trữ dữ liệu ở định dạng tệp Excel. Tại sao vậy?
Câu trả lời:
Các xlsx
định dạng được sử dụng bởi Excel hiện đại thực sự là một định dạng nén. Đó là một kho lưu trữ ZIP chứa các tệp văn bản (XML) trong một cấu trúc nhất định.
Nếu bạn nén tệp văn bản đơn giản của mình bằng một công cụ nén ZIP tương tự, bạn sẽ đạt được kích thước tệp tương tự.
Ngoài ra, như Bradley Uffner và Morgen đã đề cập trong các bình luận, Excel sẽ sao chép các chuỗi giống hệt nhau và chỉ lưu trữ một bản sao của chúng. Tôi không chắc chắn về mức tăng chính xác của phương pháp như vậy và nó sẽ phụ thuộc vào tập dữ liệu của bạn, nhưng nén zip đơn giản có thể sẽ giúp bạn đạt được hầu hết các cách đó. 1
9.1.3 Gói vật lý
Mỗi tài liệu XML Open Office được triển khai dưới dạng lưu trữ ZIP.
1 Tôi đoán là sự lặp lại này có hiệu quả nhất khi bạn có nhiều bảng tính, vì nén zip áp dụng độc lập cho từng tệp trong kho lưu trữ và chỉ trên các phần dữ liệu bị giới hạn tại một thời điểm - bằng cách lưu trữ tất cả các chuỗi trong một tệp, ở đó nên có một số lợi ích cho việc nén sau này. Thực tế hơn, nếu định dạng văn bản đơn giản của bạn nằm trong một tệp duy nhất thì có lẽ sẽ có một chút khác biệt.
.zip
). Thông số kỹ thuật cũng có sẵn, nhưng nó làm cho việc đọc khá khô.
Câu trả lời được đưa ra là chính xác, đó là do Excel lưu trữ dữ liệu của bạn dưới dạng xml. Cũng chính vì điều này mà việc sắp xếp dữ liệu của bạn một cách hiệu quả cũng sẽ làm giảm kích thước tệp. Tự kiểm tra - nói rằng bạn có dữ liệu như
A B C
John Smith-Johnson-Williamson 12345
Sally Smith-Johnson-Williamson 67890
John Williams 34567
Nếu bạn chỉ sắp xếp theo C (một cột có tất cả hoặc gần như tất cả các giá trị duy nhất), thì các giá trị giống hệt nhau của B sẽ không liền kề. Trong xml của Excel, nó trông như thế này:
<12345><John><Smith-Johnson-Williamson>
<34567><John><Williams>
<67890><Sally><Smith-Johnson-Williamson>
Nếu bạn sắp xếp theo B (một cột có các giá trị chung), thì các giá trị giống hệt nhau sẽ liền kề. Trong xml của Excel, nó trông như thế này:
<Smith-Johnson-Williamson><John><12345>
<Sally><67890>
<Williams><John><34567>
Vì chuỗi dài đó giống hệt nhau và liền kề, Excel biết rằng nó có thể đóng gói chúng lại với nhau, tương tự như khi mọi người viết danh sách và để lặp lại một phần của dòng trên, họ gõ dấu ngoặc kép thay vì viết lại cùng một thứ. Tôi không tìm thấy bất kỳ bằng chứng nào về một từ điển chuỗi chia sẻ trong cuộc điều tra của mình - chỉ là sự thụt dòng này thay cho giá trị trường lặp lại.
Tôi đã có danh sách gửi thư của 250.000 khách hàng trên khắp 11 tiểu bang và trên mỗi bản ghi có một trường là một trong hai chuỗi xác định đề nghị họ nhận được. Nhân viên của chúng tôi vì một số lý do đã quen với việc tìm mọi người theo địa chỉ đường phố của họ như đã nói, vì vậy nó được sắp xếp trên cột số đường phố, sau đó là tên đường phố, thành phố, v.v ... khi tôi sử dụng ưu đãi trước, sau đó là tiểu bang, mã zip, thành phố, tên đường, số đường phố và cuối cùng là địa chỉ-2, kích thước tệp đã giảm đáng kể. Tôi đã kiểm tra xml đã giải nén trên tệp được sắp xếp theo từng cách để xem điều gì đang xảy ra, và trên đây là những gì tôi đã suy luận. Nếu có nhiều trường có nhiều hơn 5 ký tự, nhưng các giá trị thuộc một tập hợp giới hạn (giả sử, các cách xử lý vé như 'đã giải quyết', 'bị từ chối', 'được phê duyệt', v.v.),
Nếu bạn có một số như 3.14159265359, bạn cần 13 byte để lưu trữ tệp này trong tệp văn bản; nếu bạn lưu trữ số này dưới dạng float, bạn chỉ cần 4 byte.
xls
(BIFF), tôi không nghĩ xlsx
làm điều này. xlsx
lưu trữ tất cả dữ liệu trong các tệp XML, không thực hiện mã hóa nhị phân các chữ số - chúng được chuyển đổi và lưu trữ dưới dạng chuỗi văn bản. Tôi vẫn đang cố gắng tìm kiếm phần có liên quan của đặc tả, nhưng thử nghiệm thực nghiệm của tôi (tức là trích xuất một tài liệu đã lưu) cho thấy 1.123
được lưu trữ theo nghĩa đen dưới dạng chuỗi 5 ký tự trong XML.
c
( Ô ) cho thấy các ô lưu trữ dữ liệu của chúng trong v
các thẻ, như được định nghĩa trong ECMA-376-1: 2016 § 18.3.1.96 v
(Giá trị ô) trong đó chúng nói Các giá trị có thể có của phần tử này được xác định bởi loại đơn giản ST_X chuỗi (§22.9.2.19). - họ cung cấp các ví dụ như <v>28086.3541666667</v>
nơi dữ liệu được lưu trữ rõ ràng dưới dạng chuỗi.
xlsb
, rất được khuyến khích cho các tờ lớn