Typically I wouldn't be concerned but I'm trying to design my app from
the ground up with the potential for huge volume.

As I said it was just a thought, being able to capture those deleted
items seems like a neat idea.

No problem really, just seems like I could spread those writes out
some, with help from memcache.

I can get around it really, keep a list of objects that need to be
synched back into the database, loop through it. No big deal.

And no, it's not that the database queries are slow per-se, just that
since I'm doing memcache calling already, they seem a little
extraneous for setting an integer. ;-)

I'm trying to design a game, web based, written in PHP. The "player"
object - with all the profile info attached to it - is needed in
basically any operation. You can see why I wanted to cache the reads
at least. ;-)

I can already see the performance boost when the app loads a character
object from the database as compares to loading the same object from
memcache. I'm also planning to set it up in a distributed
configuration, with a scalable setup from the get-go.

I'm guessing several thousand calls for the player object per minute,
at a minimum. And if each of those creates a write operation, it seems
to me that'd be a big batch of avoidable disk paging.

As I said, I can work around the limitation, just thought it might be
a neat option for later. :-)

On Dec 4, 10:14 am, "Boris Partensky" <[EMAIL PROTECTED]>
wrote:
> Hi Justin. This one, in my opinion, just like some other posts here, is just
> another attempt to hammer that square peg into a round hole. Bad idea. I
> would strongly discourage from going down this path.
> What are you trying to achieve? If you elaborate more about why you are so
> concerned about database writes, you may draw some constructive ideas.
> Is performance of individual db writes so bad, that you are trying to
> batch-ify them? Is write volume very high?
>
> Boris
>
> On Wed, Dec 3, 2008 at 9:41 PM, Justin Mecham <[EMAIL PROTECTED]>wrote:
>
>
>
>
>
> > Not a problem per se, and yes, I know it's a cache. I was just trying
> > to avoid having every write hit the database, intending to never
> > handle a database write until a delete happened, or via an automated
> > server side process. Like a memcache->dump_to_disk ;-)
>
> > The more I think about it though, an update based on an index probably
> > isn't a big deal to just run that update...
>
> > My thought though was that I could set it so the database writes only
> > happened every so often as the user was roaming about the site, but
> > that leaves me with no recent copy of their data if they from the site
> > after a few changes, before that frequency write happens. Thus the
> > thought of a dbase save when that item was deleted. I suppose I could
> > loop through open users and save people who haven't been saved lately;
> > that idea appeals to me really.
>
> > Just trying to contribute to the community. :-) Offering the end user
> > an api spot to access those deleted items seems like a neat idea, if
> > used cleverly. :-)
>
> > On Dec 3, 9:27 pm, "Josef Finsel" <[EMAIL PROTECTED]> wrote:
> > > My first thought is... No,let me answer your question a different way by
> > > asking what problem you are trying to solve. memcached is an in-memory
> > cache
> > > which solves the problem of temporary storage of data where it's more
> > easily
> > > accessible than the source (
> >http://en.wikipedia.org/wiki/Cache_(computing)<http://en.wikipedia.org/wiki/Cache_%28computing%29>
> > ).
> > > memcached is not:
>
> > >    - a persistent store
> > >    - a write-through cache
> > >    - a database
>
> > > Part of why memcached works so well is that it does one thing and one
> > thing
> > > only, cache data in memory until either the Expiration time comes or the
> > > memory is needed as determined by the LRU algorithm. If you want
> > memcached
> > > to perform some function, such as call backs for expired/deleted items,
> > > writing data to the database, high-availability via replicated caches
> > > between servers, acting as a queue, then you don't want a cache, you want
> > > something else, and there are a whole host of "extensions" to memcached
> > like
> > > memcachedb that probably provide what you need. The reason these are not
> > in
> > > memcached is because they add a great deal of overhead that slows down
> > the
> > > efficiency of the cache server.
>
> > > If you have no problem with being tied to a MS platform, you can use
> > > Velocity, which offers tagging and a whole host of other "improvements"
> > over
> > > memcached. But what it doesn't offer is the simple, fast efficiency of
> > > memcached. I'm currently working with the CTP2 and dreading the fact that
> > > CTP3 will have a write-through cache because the overhead is ugly. And
> > > everything Dustin and Dormando say about tags.... I see why they aren't
> > > implemented in memcached.
>
> > > So, what problem are you trying to solve? It may be that memcached is a
> > part
> > > of it. But having memcached deletes write data to the database is
> > troubling.
> > > What happens if someone has directly updated the database between the
> > time
> > > the data is stored in the cache and the time it expires. Will the cache
> > > version overwrite the changes in the database? Will it fail? If it fails,
> > > should it notify someone?
>
> > > So tell us what problem you need to solve and we might be able to help
> > steer
> > > you to the best solution.
>
> > > Josef
>
> > > On Wed, Dec 3, 2008 at 9:08 PM, Justin Mecham <[EMAIL PROTECTED]
> > >wrote:
>
> > > > I understand how memcached deletes items to be this, proto-code
> > > > stylie:
>
> > > > function server_add/replace_value(value){
>
> > > >  while (server_used_memory>server_max_usable_memory)
> > > >  {
> > > >       delete_oldest_item()
> > > >  }
>
> > > > server_save(value)
>
> > > > }
>
> > > > understanding that the deleted items might more than one, would it be
> > > > possible to somehow optionally return these deleted values to the
> > > > functions on the application server? This would be spiffy for
> > > > controlling database writes.
>
> > > > a bit more of my shabby proto-code
>
> > > > $deleted=null; //a variable to return the deleted values into
> > > > $memcache->add($key,$value,false,600,$deleted);
>
> > > > if($deleted!=null)
> > > > {
> > > >  foreach($deleted as $key=>$value)
> > > >  {
> > > >       dbase_save($deleted);
> > > >  }
> > > > }
>
> > > > Let me know what you think. :-)
>
> > > --
> > > "If you see a whole thing - it seems that it's always beautiful. Planets,
> > > lives... But up close a world's all dirt and rocks. And day to day,
> > life's a
> > > hard job, you get tired, you lose the pattern."
> > > Ursula K. Le Guin
>
> > >http://www.finsel.com/words,-words,-words.aspx(My<http://www.finsel.com/words,-words,-words.aspx%28My>blog)
> > > -
> >http://www.finsel.com/photo-gallery.aspx(My<http://www.finsel.com/photo-gallery.aspx%28My>Photogallery)
> >  -
> >http://www.reluctantdba.com/dbas-and-programmers/blog.aspx(My<http://www.reluctantdba.com/dbas-and-programmers/blog.aspx%28My>Professional
> > > Blog)
>
> --
> --Boris

Reply via email to