« Don't Panic | Main | Those who misremember history... »

March 08, 2008

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00e0098be7b3883300e550be5e298833

Listed below are links to weblogs that reference Ruby and other gems:

Comments

Randal L. Schwartz

The Gemstone architecture is really nice.

Imagine having to power your website with steam, but to get the steam, you had to keep melting ice (your database) into a liquid, and then heating that liquid into steam. And when you were done, you had to cool the rearranged steam back to liquid and then back to ice for the next hit. Ouch.

Gemstone lets you "store the steam". Yes, make your website steam powered with Gemstone!

murphee

Gemstone is interested in supporting the OODB in Ruby. JRuby with their Java based product, but more interestingly in Rubinius, where they can do some of their pointer magic (Rubinius uses tagged pointers and has some tag space left so Gemstone can use it for their purposes).
Not sure what the current status of this is, but at least this was the plan last August:
http://www.infoq.com/news/2007/08/gemstone-ruby

Michal Migurski

I'm curious how you deal with cache invalidation ("the other hard problem in computer science") - do the worker processes communicate amongst each other, do cached items take time to propagate from worker to worker, does the storage engine have a hand in keeping them synchronized, and does the overhead grows as the system expands to many workers? One of the best innovations introduced by memcache and other early 00's web application technologies was a basic comfort level with slightly-stale information.

Dale Henrichs

@Michal
As an OODB, GemStone is transactional and cache invalidation occurs at transaction boundaries.

Without going into great detail (GemStone's technology has been evolving over the last 20 years, so their is quite a bit of detail) an object table is used to track the objects associated with a transactional view. When a gem aborts, it picks up a reference to the object table for that view and it gets a list of objects that have been changed since the gem last aborted. The gem invalidates the copies of the changed objects in it's head and uses the object table to find the new version of the object in the shared page cache (the object is loaded from disk if it isn't in the shared page cache) if and when that object is referenced again.

We have and continue to optimize these interactions. There are production systems that have thousands of gems connected to the stone and there are production systems that routinely perform thousands of transactions per second.

Mitch Thomas

"If only it ran Ruby..."

And if so, when?

German Arduino

Interesting comparison. As I'm trying to learn Gemstone (GLASS by now) want to ask:

The "Stone" object store can be on more than one server, I mean isn't tied to a only one hefty machine?

At last you writes: "If only it ran Ruby... ", means that currently you prefer Ruby over Smalltalk or means other thing?

Cheers.

Dale Henrichs

@German

The "stone" is a single process that runs on a single machine and it manages the repository. For the higher transaction rates the stone's will be a hefty machine with a fancy disk subsystem, but you can get pretty good performance from commodity hardware.

The "gems" can be run on multiple hosts and they all connect to the "stone."

Dr Nic

I'll take a half dozen, please.

stu

Everything I learned about databases, large-scale domain modeling, I learned (initially) from GemStone/J and Smalltalk, around 10 years ago. I still am friends with a few GemStoners from FPL, OOCL, and other spots, and I'm glad to see it's still around outside those circles.

Frankly, I do think Rails is one of the closest things to that tradition, and in some ways it's getting even better. Moreover, I think the Semantic Web may also be a source of great work that harkens back to the days of the OODB....

German Arduino

@Dale:

Thanks by your explanation.

nik heger

Excellent article, thanks!

One thing occurred to me though: You make it sound like MySQL or another relational DB is bad because it's different from the OO implementation. That is only partially correct. It's bad because the storage model (tables) doesn't fit the application model (objects). However, it's good because it provides an abstraction from the app model.

This is the major problem with writing out binaries - the db is inherently dependent on the language and perhaps even version of the language it was implemented in.

Ideally, I would want an OO DB that's in a general, and language-unrelated format. Object-oriented, but generalized and mapped to the implementation. I would want the DB to be language-agnostic. It should not matter whether I am using Smalltalk, Ruby, Java, or any other OO language on the app layer.

Avi Bryant

@nik - if you want a language agnostic OODB, check out GOODS. It has clients for various languages, and those for Java, Python, and Smalltalk are interoperable (I wrote the latter two).

rosettastonesoft

Hi,The greatest blessing for you!jtysxqslzgltykyxxl

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment

My Photo

Twitter Updates

    follow me on Twitter