Zstd 스트림에서 Flexi 스트림을 사용하여 라인을 읽는 것은 빠르지 않습니다.

Flexi-streams를 사용하여 ZSTD 아카이브에서 1,000줄을 읽고 평균 줄 길이를 찾습니다. 내 프로그램은 아래와 같습니다.

(defun average-1000-etipitaka-flexi-streams ()                                                                                                                                             
  (with-open-file (f #P"etipitaka.txt.zst" :element-type '(unsigned-byte 8))                                                                                 
    (zstd:with-decompressing-stream (zs f)                                                                                                                   
      (let ((s (utf8-input-stream:make-utf8-input-stream zs)))                                                                                               
        (loop for line = (read-line s nil nil)                                                                                                               
              until (null line)                                                                                                                              
              count 1 into l                                                                                                                                 
              sum (length line) into c                                                                                                                       
              when (> l 1000) do (return (float (/ c l)))                                                                                                    
              finally (return (float (/ c l))))))))    


etipitaka.txt.zst 파일의 텍스트는 다음과 같습니다.

สิงสถิต เขตเมืองเวรัญชา พร้อมด้วยภิกษุสงฆ์หมู่ใหญ่ประมาณ ๕๐๐ รูป เวรัญชพราหมณ์                                                                                              
ได้สดับข่าวถนัดแน่ว่า ท่านผู้เจริญ พระสมณะโคดมศากยบุตร ทรงผนวชจากศากยตระกูล                                                                                              
ประทับอยู่ ณ บริเวณต้นไม้สะเดาที่นเฬรุยักษ์สิงสถิต เขตเมืองเวรัญชา พร้อมด้วยภิกษุสงฆ์   


평균 줄 길이는 68.8바이트입니다.

Celeron N4500이 장착된 노트북의 SBCL 2.2.5-1.1-suse에서 평균 1000-etipitaka-flexi-streams를 실행했습니다. 1.591초가 걸렸다.

그런 다음 파일을 평균 줄 길이가 515.5바이트인 my-data.ndjson.zst로 변경합니다. average-1000-ndjson-flexi-streams를 실행하는 데 4.411초가 걸렸습니다.

그래서 제 커스텀utf8-input-stream으로도 테스트를 했습니다. average-1000-etipitaka-utf8-input-stream 및 average-1000-ndjson-utf8-input-stream을 실행하는 데 각각 0.019초 및 0.043초가 걸렸습니다. 이러한 테스트에서 Flexi-stream보다 긴 라인의 경우 더 빠릅니다.

좋은 웹페이지 즐겨찾기