-
Notifications
You must be signed in to change notification settings - Fork 211
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Virtuoso imposes a limit of 2^20 = 1048576 results on HTTP response #700
Comments
1048576 is a known limit on the size of a Virtuoso result set, thus using limit and offset is the way to go if you really need this many results. |
Thanks for reply, |
You are dealing with an HTTP limitation. You can use ODBC or JDBC connections to Virtuoso that execute SPARQL queries too. The problem is that a document comprising a solution of 1 million+ tuples over HTTP is not the norm for any benchmark. You can perform a variety of relational operations over databases of various sizes, but the solutions themselves do not amount to a dump of 1 million plus tuples (be it records in a table or statement graphs). Anyway, if you want to retrieve data progressively over HTTP, which is what we offer, then you have OFFSET and LIMIT; otherwise, you can push this all through alternative protocols like ODBC or JDBC. I hope this helps. |
@kidehen |
As a temporary workaround, edit the file libsrc/Wi/sparql_io.sql around line 3236 you will find the following
Change this to
and recompile. I am working on a permanent fix which will be committed to VOS probably tomorrow. |
To be clear, I should have stated this was a Virtuoso HTTP interface limitation. Anyway, as per comment by @pkleef, the arbitrary limit can be increased. |
Patrick,
I'm afraid that
maxrows := 10*1024*1024; -- More than enough for web-interface.is not safe, as the box length should be encoded by 3 bytes, so it's 16*1024*1024, this gives safe margins
maxrows := ((16*1024*1024)/4)-2;
on 32-bit builds (4 bytes per pointer), and 32 bit builds are possible only for VOS versions as old as 5.x
and for 64 bit builds it is even smaller
maxrows := ((16*1024*1024)/8)-2;
This is reflected in Dk/Dkbox.h, lines ~56--57, depending on version,
#define MAX_BOX_LENGTH ((size_t)0xFFFFFF)
#define MAX_BOX_ELEMENTS (MAX_BOX_LENGTH/sizeof(void *))
Best Regards,
Ivan
|
thanks. i have changed the
I think it would be cool if this parameter is somehow matched to |
I don't see how you are getting 20 million results, as that is bigger than the |
This issue might not be new. I am running some large results queries by contacting virtuoso SPARQL endpoint from my java application. I have noticed that Virtuoso endpoint does not retrieve more than 1048576 results as HTTP response, no matter how large you set the ResultSetMaxRows in the configuration file. Is there a way to remove this limit? I have also noted that ISQL does not have such limit.
The text was updated successfully, but these errors were encountered: