You really did great job. Regarding sqlalchemy is so great a piece of work,
sharding deserves more love. I'm myself only touch the surface of it in a
real project, maybe I can feedback more or contribute some code if I can
write the right one:)

On Thu, Apr 21, 2011 at 9:23 AM, Michael Bayer <mike...@zzzcomputing.com>wrote:

> ah well, glad to hear that !   It certainly can be more of a core element
> if it had some more dedicated maintainers.  I haven't actually used it in a
> real project so i can't vouch strongly for it.    It also might be a nice
> third-party project.   Sharding is very tough and there's lots of complex
> cases that come up pretty fast.
>
>
> On Apr 20, 2011, at 8:05 PM, can xiang wrote:
>
> Thanks anyway.
>
> It's sad horizontal shard extension is only considered as a example. I
> hardly believe it, because it works so great in some of my simple use case.
> I really hope there would be more work on this extension or more docs on how
> to do it.
>
> Best regards!
> can
>
> On Thu, Apr 21, 2011 at 3:19 AM, Michael Bayer 
> <mike...@zzzcomputing.com>wrote:
>
>>
>> On Apr 20, 2011, at 4:37 AM, can xiang wrote:
>>
>> > Hi,
>> >
>> > I have a problem of bulk deleting from a sharded session, I tried to
>> > search the previous posts without any finding.
>> >
>> > I have the following table:
>> >
>> > usersession_table = Table('kg_usersession', meta,
>> >                          Column('session_id', String(32),
>> > primary_key=True),
>> >                          Column('user_id', BigInteger, index=True,
>> > nullable=False),
>> >                          Column('create_time', DateTime, index=True),
>> >                          Column('expire_time', DateTime, index=True),
>> >                          Column('site', String(10)),
>> >                          mysql_engine='MyISAM'
>> >                          )
>> >
>> > I use horizontal sharding by "session_id", with the following shard
>> > chooser:
>> >
>> > def shard_chooser(mapper, instance, clause=None):
>> >    if instance:
>> >        return shard_value(instance.session_id)
>> >
>> > Then, I want to delete all record earlier than a given expire_time,
>> > with the following code:
>> >
>> >
>> session.query(UserSession).filter(UserSession.expire_time<=expire_time).delete();
>>
>> range deletions are not supported by the ShardedSession extension right
>> now.   You'd need to implement your own delete() onto ShardedQuery.
>>
>> Note that the horizontal shard extension really should have been an
>> example, not a full extension.  It's really just a proof of concept and
>> real-world horizontal sharding scenarios will usually need to tweak it for
>> specific use cases.
>>
>>
>>
>>
>>
>> >
>> > It raises an error:
>> >
>> > Traceback (most recent call last):
>> >  File "delete_expire_session.py", line 20, in <module>
>> >    delete_expire_session(expire_time)
>> >  File "delete_expire_session.py", line 13, in delete_expire_session
>> >
>> >
>> session.query(UserSession).filter(UserSession.expire_time<=expire_time).delete();
>> >  File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6.5-
>> > py2.6.egg/sqlalchemy/orm/query.py", line 2142, in delete
>> >    result = session.execute(delete_stmt, params=self._params)
>> >  File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6.5-
>> > py2.6.egg/sqlalchemy/orm/session.py", line 726, in execute
>> >    engine = self.get_bind(mapper, clause=clause, **kw)
>> >  File "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6.5-
>> > py2.6.egg/sqlalchemy/ext/horizontal_shard.py", line 73, in get_bind
>> >    return self.__binds[shard_id]
>> > KeyError: None
>> >
>> > I guess shard_chooser return None because of "instance" is None at
>> > runtime. I read from the docs: shard_chooser maybe in "some round-
>> > robin scheme". But I don't have any idea what does it exactly mean in
>> > my case.
>> >
>> > I appreciate any advice.
>> >
>> > Best regards!
>> > can
>> >
>> >
>> > PS: you can access partial source code in the gist:
>> https://gist.github.com/930708
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> Groups "sqlalchemy" group.
>> > To post to this group, send email to sqlalchemy@googlegroups.com.
>> > To unsubscribe from this group, send email to
>> sqlalchemy+unsubscr...@googlegroups.com.
>> > For more options, visit this group at
>> http://groups.google.com/group/sqlalchemy?hl=en.
>> >
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sqlalchemy" group.
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> To unsubscribe from this group, send email to
>> sqlalchemy+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/sqlalchemy?hl=en.
>>
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to