[ 
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.

Reply via email to