Malcolm Tredinnick wrote:
> So, once again, it was Jeremy stirring the pot and it's you keeping the
> issue alive a couple of years later.

Well, the issue wasn't resolved. What could I do? :-)

> I think the comments and requests for information Younger Me made in
> that thread are still valid. These days I would also throw in checking
> how concurrent cursor behaviour on the same connection works. We already
> know that SQLite cannot handle creating a new result set / cursor when
> an existing cursor is only partially read and I wonder if there are
> similar issues like that (again, it's related to lifecycle and resource
> management of the server-side data).

I think we can solve the whole issue of different concurrency levels 
within one connection among backends just by having more than one 
connection. I.e. make a new connection for each queryset requested with 
a server-side flag.

API may be as simple as:

     MyModel.objects.all().server_side()

which sould trigger a flag in a queryset instance that is then passed 
onto backends cursor() method. This will require changing all backends 
to hold a list of opened connections but I thinks it's not too 
complicated. Luckily there's no public API in Django for accessing 
connection objects directly. There's db._connection but it has '_' 
before it for a reason :-)

Another option is to reuse an old proposal of Simon Willison on .using() 
method for querysets that switches it between several configured 
databases. Then we can invent a new setting system for multiple DBs like:

     DATABASE = {
         'default': ...,
         'huge_archive': {
             'name': ...,
             'user_server_side_cursor': True,
         }
     }

And then a queryset can `.using('huge_archive')` to use server-side 
cursors. But I like this thing less because it's more complex and it 
confuses into one method slightly different things.

> As I wrote that previous paragraph, I also remembered [2], mentioning
> unbuffered cursors in MySQLdb (at least in the future, as of a year ago)
> and the need for one cursor at a time in that case.

I believe Andy was talking about MySQLdb > 1.2 but we're still on 1.2 so 
it's not something I'd consider here.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to