You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@chemistry.apache.org by Mark Streit <mc...@gmail.com> on 2013/06/06 22:05:38 UTC

CMIS SQL query String limits: question

Hello

I have question which appears to have been raised some time ago:
http://mail-archives.apache.org/mod_mbox/chemistry-dev/201106.mbox/%3C4DF8D70D.7000200%40alfresco.com%3E

In that thread, there is reference made to this:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Standard_Implementation
-> maxHttpHeaderSize

In the thread, it is also mentioned that:

*The CMIS specification says that the server has to add a Location
header to its query response
that is "representing the feed for that query". That basically means
that the query is repeated
in the HTTP header*.
The default header buffer size in Tomcat 6 and 7 is 8k. If you remove
all other headers you
end up with about 7884 byte -- plus/minus a few bytes.
You can increase header buffer size in Tomcat.
in the HTTP header.
The default header buffer size in Tomcat 6 and 7 is 8k. If you remove
all other headers you
end up with about 7884 byte -- plus/minus a few bytes.
You can increase header buffer size in Tomcat.

Just curious - is this something in the specification that can only be
addressed by placing the entire query String in the header?

We have a use case for which the WHERE IN( ) clause could contain up to
1000 or more 16-digit String values inside the WHERE acme:userID IN(
value1, value2, value3....)  part of the query - the acme:employeeID is a
custom metadata property of the implemented content model.

FWIW... we use:

OpenCMIS 0.8.0
Alfresco Enterprise 4.1.3


Thanks

Mark
* *

Re: CMIS SQL query String limits: question

Posted by Florian Müller <fm...@apache.org>.
 I have done some experiments like this in the past and most query 
 strings are getting longer rather than shorter.
 I have also played with some domain specific compression and that looks 
 promising. But I haven't finished it yet.

 Florian


> For very long and probably repetitive query strings, which should
> compress well, you could use a representation based on gzip + base64
> of the query string.
>
> Florent
>
> On Fri, Jun 7, 2013 at 11:03 AM, Florian Müller <fm...@apache.org> 
> wrote:
>> Hi Mark,
>>
>> The specification does not explicitly say that the entire query 
>> string must
>> be in the header.
>> The specification says for the AtomPub binding:
>> "Upon submission (creation) of a query document, a response must be 
>> returned
>> with a Location header representing the feed for that query."
>>
>> That is, a client should be able to repeat the query by just calling 
>> the URL
>> in Location header (via HTTP GET). That means the URL must contain 
>> all
>> necessary information about this query.
>> There are two approaches to implement that. OpenCMIS uses a 
>> stateless
>> approach and puts everything into the URL, which could be become 
>> very long.
>> An alternative approach would be to store the query on the server, 
>> assign
>> the query statement an id, and return an URL with that id. But that 
>> would
>> require some sort of storage on the server side and opens up the 
>> question
>> how long do you want to maintain these ids.
>>
>>
>> - Florian
>>
>>
>>
>>> Hello
>>>
>>> I have question which appears to have been raised some time ago:
>>>
>>>
>>> 
>>> http://mail-archives.apache.org/mod_mbox/chemistry-dev/201106.mbox/%3C4DF8D70D.7000200%40alfresco.com%3E
>>>
>>> In that thread, there is reference made to this:
>>>
>>>
>>> 
>>> http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Standard_Implementation
>>> -> maxHttpHeaderSize
>>>
>>> In the thread, it is also mentioned that:
>>>
>>> *The CMIS specification says that the server has to add a Location
>>> header to its query response
>>> that is "representing the feed for that query". That basically 
>>> means
>>> that the query is repeated
>>> in the HTTP header*.
>>> The default header buffer size in Tomcat 6 and 7 is 8k. If you 
>>> remove
>>> all other headers you
>>> end up with about 7884 byte -- plus/minus a few bytes.
>>> You can increase header buffer size in Tomcat.
>>> in the HTTP header.
>>> The default header buffer size in Tomcat 6 and 7 is 8k. If you 
>>> remove
>>> all other headers you
>>> end up with about 7884 byte -- plus/minus a few bytes.
>>> You can increase header buffer size in Tomcat.
>>>
>>> Just curious - is this something in the specification that can only 
>>> be
>>> addressed by placing the entire query String in the header?
>>>
>>> We have a use case for which the WHERE IN( ) clause could contain 
>>> up to
>>> 1000 or more 16-digit String values inside the WHERE acme:userID 
>>> IN(
>>> value1, value2, value3....)  part of the query - the 
>>> acme:employeeID is a
>>> custom metadata property of the implemented content model.
>>>
>>> FWIW... we use:
>>>
>>> OpenCMIS 0.8.0
>>> Alfresco Enterprise 4.1.3
>>>
>>>
>>> Thanks
>>>
>>> Mark
>>> * *
>>
>>


Re: CMIS SQL query String limits: question

Posted by Florent Guillaume <fg...@nuxeo.com>.
For very long and probably repetitive query strings, which should
compress well, you could use a representation based on gzip + base64
of the query string.

Florent

On Fri, Jun 7, 2013 at 11:03 AM, Florian Müller <fm...@apache.org> wrote:
> Hi Mark,
>
> The specification does not explicitly say that the entire query string must
> be in the header.
> The specification says for the AtomPub binding:
> "Upon submission (creation) of a query document, a response must be returned
> with a Location header representing the feed for that query."
>
> That is, a client should be able to repeat the query by just calling the URL
> in Location header (via HTTP GET). That means the URL must contain all
> necessary information about this query.
> There are two approaches to implement that. OpenCMIS uses a stateless
> approach and puts everything into the URL, which could be become very long.
> An alternative approach would be to store the query on the server, assign
> the query statement an id, and return an URL with that id. But that would
> require some sort of storage on the server side and opens up the question
> how long do you want to maintain these ids.
>
>
> - Florian
>
>
>
>> Hello
>>
>> I have question which appears to have been raised some time ago:
>>
>>
>> http://mail-archives.apache.org/mod_mbox/chemistry-dev/201106.mbox/%3C4DF8D70D.7000200%40alfresco.com%3E
>>
>> In that thread, there is reference made to this:
>>
>>
>> http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Standard_Implementation
>> -> maxHttpHeaderSize
>>
>> In the thread, it is also mentioned that:
>>
>> *The CMIS specification says that the server has to add a Location
>> header to its query response
>> that is "representing the feed for that query". That basically means
>> that the query is repeated
>> in the HTTP header*.
>> The default header buffer size in Tomcat 6 and 7 is 8k. If you remove
>> all other headers you
>> end up with about 7884 byte -- plus/minus a few bytes.
>> You can increase header buffer size in Tomcat.
>> in the HTTP header.
>> The default header buffer size in Tomcat 6 and 7 is 8k. If you remove
>> all other headers you
>> end up with about 7884 byte -- plus/minus a few bytes.
>> You can increase header buffer size in Tomcat.
>>
>> Just curious - is this something in the specification that can only be
>> addressed by placing the entire query String in the header?
>>
>> We have a use case for which the WHERE IN( ) clause could contain up to
>> 1000 or more 16-digit String values inside the WHERE acme:userID IN(
>> value1, value2, value3....)  part of the query - the acme:employeeID is a
>> custom metadata property of the implemented content model.
>>
>> FWIW... we use:
>>
>> OpenCMIS 0.8.0
>> Alfresco Enterprise 4.1.3
>>
>>
>> Thanks
>>
>> Mark
>> * *
>
>



-- 
Florent Guillaume, Director of R&D, Nuxeo
Open Source, Java EE based, Enterprise Content Management (ECM)
http://www.nuxeo.com   http://www.nuxeo.org   +33 1 40 33 79 87

Re: CMIS SQL query String limits: question

Posted by Florian Müller <fm...@apache.org>.
 Hi Mark,

 The specification does not explicitly say that the entire query string 
 must be in the header.
 The specification says for the AtomPub binding:
 "Upon submission (creation) of a query document, a response must be 
 returned with a Location header representing the feed for that query."

 That is, a client should be able to repeat the query by just calling 
 the URL in Location header (via HTTP GET). That means the URL must 
 contain all necessary information about this query.
 There are two approaches to implement that. OpenCMIS uses a stateless 
 approach and puts everything into the URL, which could be become very 
 long. An alternative approach would be to store the query on the server, 
 assign the query statement an id, and return an URL with that id. But 
 that would require some sort of storage on the server side and opens up 
 the question how long do you want to maintain these ids.


 - Florian


> Hello
>
> I have question which appears to have been raised some time ago:
> 
> http://mail-archives.apache.org/mod_mbox/chemistry-dev/201106.mbox/%3C4DF8D70D.7000200%40alfresco.com%3E
>
> In that thread, there is reference made to this:
> 
> http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#Standard_Implementation
> -> maxHttpHeaderSize
>
> In the thread, it is also mentioned that:
>
> *The CMIS specification says that the server has to add a Location
> header to its query response
> that is "representing the feed for that query". That basically means
> that the query is repeated
> in the HTTP header*.
> The default header buffer size in Tomcat 6 and 7 is 8k. If you remove
> all other headers you
> end up with about 7884 byte -- plus/minus a few bytes.
> You can increase header buffer size in Tomcat.
> in the HTTP header.
> The default header buffer size in Tomcat 6 and 7 is 8k. If you remove
> all other headers you
> end up with about 7884 byte -- plus/minus a few bytes.
> You can increase header buffer size in Tomcat.
>
> Just curious - is this something in the specification that can only 
> be
> addressed by placing the entire query String in the header?
>
> We have a use case for which the WHERE IN( ) clause could contain up 
> to
> 1000 or more 16-digit String values inside the WHERE acme:userID IN(
> value1, value2, value3....)  part of the query - the acme:employeeID 
> is a
> custom metadata property of the implemented content model.
>
> FWIW... we use:
>
> OpenCMIS 0.8.0
> Alfresco Enterprise 4.1.3
>
>
> Thanks
>
> Mark
> * *