On Oct 13, 2008, at 5:50 PM, Mike Malone wrote:
i'd contend, however that you'd really have to structure you app in
a very
bad way to have any the db schema be of consequence. there are
indexes and
there is caching at many levels. hitting the app and db for ever
request
doesn't scale period. in fact, rdbms don't scale well anyhow - not
if you
count 'easily' in your criteria that is. anyone who has every
tried tried
to setup high-availability db backends knows this. again though,
this is a
point where couchdb could really shine - they look to have
addressed this
from the get go.
I'm not sure I follow... seems like you're contradicting yourself
here a
bit. I agree with the second part - RDBMSs don't scale well. At a high
level, for most web applications they're more or less a single
"thread,"
creating a bottleneck in a system that can otherwise scale
horizontally. Of
course you can shard, creating additional "threads," but that's not
a at all
a straightforward process.
With that in mind, I'd say that you have to structure your
application very
carefully in order for the DB layer to scale. The DB schema is
critical
here, you must denormalize and carefully shard your data in order to
scale.
Normalizing your schema to the extent you described earlier, in
order to
allow "dynamic properties," would destroy performance on a highly
trafficed
web application. Sure, you can cache, but you still need to read
from the DB
for new or invalidated items.
The sort of architecture I've been contemplating is one where certain
heavyweight entities in the application would be stored in CouchDB
while
other lighter weight/more relational entities would remain in the
RDBMS.
Suppose I were designing a messaging system, for instance. I may
store basic
User information in an RDBMS, along with social graph information,
and an
"inbox" table that stores the id of each Message sent to each User
(some of
these tables would still need to be sharded at some point). The
Messages
themselves I'd store in CouchDB. I may also put certain extended
Profile
information for Users in CouchDB.
Anyways, I'm fairly new to document-based databases and my intuition
may be
wrong here (please correct me if it is) but it seems to me that
CouchDB can
be used alongside a more traditional RDBMS in this way.
Mike
sure - i agreed totally. by 'does not scale' i meant once you want to
move beyond one machine - then it's such a royal PITA. of course the
schema is important at a high level, but a relationship here or there
shouldn't make or break performance.
i'm working on a similar mixture of storage at the moment - but the
thought of replication and scaling makes me a bit queasy. the beauty
of couchdb is the concept that everything talks http which should
provide mechanisms for really novel scaling strategies to emerge.
cheers.
a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama