On Oct 4, 2007, at 6:25 , Tobias Lütke wrote:
Once tagging is available however collections can be cached directly.
Collections will be tagged with the key for each article contained.
Very complex queries can now be simply cached dumped into memcached
because they can be invalidated by a simple command.
Simply override the cached key for the article by re-setting it and
issue a tag invalidation on the same key:
Cache.set('article:1', a)
Cache.invalidate_tag('article:1')
This also means that the number of tags in the system will be quite
large. There will be one or more tags for each row in the articles
table. I expect the amount of tags to be vastly larger then the amount
of keys in future memcached servers.
I think that's *a* use, but I don't know that it's necessarily the
primary use. It's more of an argument for cleaning up tags when
we're done with them, though. It doesn't change much of the original
proposal other than confirming that we do, indeed need to clean them up.
On 10/4/07, Dustin Sallings <[EMAIL PROTECTED]> wrote:
On Oct 4, 2007, at 1:07, BUSTARRET, Jean-francois wrote:
It would be nice to be able to add multiple tags with a single
commands :
add_tag(key, tag1, tag2, ..., tagN), to avoid multiple roudtrips,
or add a
tag list as an optionnal parameter to the set/add/replace
commands. ie : set
<key> <flags> <exptime> <bytes> <tag1>,<tag2>,<tag3>...\r\n
I don't think there's a problem with multi-tag. I'd expect
people would
want to have more than one anyway.
Adding tags to all of the existing commands is a tough one,
though. The
cost of one more round trip is trivial compared to having to
change the
server processing of mutation commands and updating all of the
client APIs
to be able to handle this. In a particular client, you can still
send both
commands as a single stream and then just expect two lines of
response.
AFAIAC, I think tags need to be released. My use for tags would be
to tag
cache entries by content id/user id/channel id. Having to store
every id
used (even deleted content/content not accessed for a long time)
since the
last start of memcached would be a problem...
OK, it's worth considering, then.
Each tag will have a reference count that is increment every time
the tag
is successfully added to an item (i.e. must not increment if an
item lookup
fails or the item already has the tag).
When the item is deallocated, all tags should be decremented for
that item.
When the tags reference count hits zero, we'll pull it from the
global map.
Memory churn may be an issue. Someone who knows allocators
better than I
do can decide what to do here.
--
Dustin Sallings
--
Tobi
http://shopify.com - modern e-commerce software
http://typo.leetsoft.com - Open source weblog engine
http://blog.leetsoft.com - Technical weblog
--
Dustin Sallings