[ https://issues.apache.org/jira/browse/COUCHDB-583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12793615#action_12793615 ]
Filipe Manana commented on COUCHDB-583: --------------------------------------- Paul, you're comments refer to the first 3 patches' implementation. The 4th and latest follow Damien's idea (comment from the 30th November). Check the last patch: couchdb-583-trunk-6th-try.patch The approach is completely different. There's no use of the query parameter ?compression=(gzip|deflate) and no longer that block buffering thing for compression / decompression :) With the latest ones the attachment are compressed and stored in compressed form (if their mime type matches one of those in the config file). As soon as a data chunk is received from the client, it is compressed with a zlib stream and written to disk. Decompression follows the same idea - 1 block is read from the disk, compressed and a chunk sent to the client. No need to buffer things. I figured out how to use zlib for incremental gzip compression/decompression. The "reshold_for_chunking_comp_responses" is completely gone also. HTTP content-encoding is now negotiated. After analying the patch, let me know if the implementation is ok and how to simplify it further. cheers > storing attachments in compressed form and serving them in compressed form if > accepted by the client > ---------------------------------------------------------------------------------------------------- > > Key: COUCHDB-583 > URL: https://issues.apache.org/jira/browse/COUCHDB-583 > Project: CouchDB > Issue Type: New Feature > Components: Database Core, HTTP Interface > Environment: CouchDB trunk > Reporter: Filipe Manana > Attachments: couchdb-583-trunk-3rd-try.patch, > couchdb-583-trunk-4th-try-trunk.patch, couchdb-583-trunk-5th-try.patch, > couchdb-583-trunk-6th-try.patch, jira-couchdb-583-1st-try-trunk.patch, > jira-couchdb-583-2nd-try-trunk.patch > > > This feature allows Couch to gzip compress attachments as they are being > received and store them in compressed form. > When a client asks for downloading an attachment (e.g. GET > somedb/somedoc/attachment.txt), the attachment is sent in compressed form if > the client's http request has gzip specified as a valid transfer encoding for > the response (using the http header "Accept-Encoding"). Otherwise couch > decompresses the attachment before sending it back to the client. > Attachments are compressed only if their MIME type matches one of those > listed in a separate config file. Compression level is also configurable in > the default.ini file. > This follows Damien's suggestion from 30 November: > "Perhaps we need a separate user editable ini file to specify compressable or > non-compressable files (would probably be too big for the regular ini file). > What do other web servers do? > Also, a potential optimization is to compress the file while writing to disk, > and serve the compressed bytes directly to clients that can handle it, and > decompressed for those that can't. For compressable types, it's a win for > both disk IO for reads and writes, and CPU on read." > Patch attached. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.