When picking a database, I think it's a bad idea to start by looking at all 
the databases available to you and comparing their features. That's like 
comparing all the vehicles available to you for a trap, picking a 
supersonic jet because of its speed, when all you needed was a bike to 
cycle 5 minutes down the road.

All these databases, key-value stores and search engines are built to solve 
different problems, and without a problem to solve you can't make an 
informed decision. Working from the problem to a tools that can fix it is 
the only way to find the right data store.

Here's some examples...

You're building a javascript-heavy website that needs to work offline and 
on mobile.
This problem suggests that you need the following attributes:
  - good syncing & conflict resolution support, because changes can be made 
offline;
  - if possible, a client-side version so that you can use the same data 
storage API whether online or offline;
  - real-time event support, so that you can, for example, show 
notification to your users when another user makes a change to some data.
What might you pick in this scenario? CouchDB is the obvious choice, as at 
its core it's about syncing and replication, and you can transparently 
support offline usage with the client-side implementation, PouchDB.

You're building a web application where user's interactions are minimal but 
you serve alot of data, and the data you provide has a clear hierarchy:
This suggests:
  - good support for relations between data, to allow you to turn raw data 
into data structures on the database side
  - transaction support, where you can batch together a set of operations 
to make sure you can rollback if something goes wrong
  - redundancy, where every write you make can also be made in other places 
so that, if you master database falls over, you can quickly restore access
In this case, you could pick something like PostgreSQL or MySQL (yep, still 
a good option). Mongo also wouldn't be a bad option, although its (lack of) 
transaction support has had me quite frustrated recently.

To quickly cover some other things you mention:
ElasticSearch isn't a database as such – it's an engine for searching your 
data. If you need to provide search over a ton of data, take a look at it.
MongoDB is a document storage engine, and is generally useful, reliable and 
easy to set up.
Redis, LevelDB and other key-value data stores do not offer, natively, 
support for storing and manipulating data structures because they are just 
key and value stores. But, as Mikeal said, there's a community around Level 
(and probably Redis) that's adding these things on top – and in that sense 
you can 'build your own database'. 
I don't know anything about RethinkDB - at a cursory glance, it doesn't 
look like they've rethought much, and it's a young platform so don't expect 
every problem you come up with to be Googleable. You only get that with 
mature systems like MySQL, Postgres - but Mongo and Couch are catching up 
in this area. Both have active and helpful communities, like Node does.

On the hosted/self-hosted question – I personally go for hosted databases 
where the problem suggests it. I'm not an operations guy and I don't know 
about database system administration. I'm a developer, and I'm concerned 
with the application logic – keeping a database running, and running fast, 
is just a distraction. However, if you're working in a team and have 
servers (& ops people) available, there are good reasons to go for a 
self-hosted option.

As you can tell, there's a lot to picking a data store – but I think one 
thing's for sure: you have to base a decision on your particular problem.

Cheers,
Tom

On Wednesday, August 28, 2013 6:14:57 PM UTC+1, Dylan Hassinger wrote:
>
> These posts really cleared it up for me. Cool stuff. Thank you so much!!
>
>
> On Wed, Aug 28, 2013 at 1:12 PM, Mikeal Rogers 
> <mikeal...@gmail.com<javascript:>
> > wrote:
>
>> I would phrase this differently. As you write your own database using 
>> node.js and LevelDB you can host it pretty much anywhere that you can run a 
>> node.js program. Its deployment and management is identical to how you 
>> manage your node.js application. This means that you avoid most of the pain 
>> that goes with running infrastructure, like traditional databases, and it 
>> means you don't really need/want specialized "database hosting."
>>
>> On Aug 28, 2013, at 7:37AM, vladimir....@gmail.com <javascript:> wrote:
>>
>> so there there is no such thing as hosted LevelDB 
>>
>>
>>  -- 
>> -- 
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines: 
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to nod...@googlegroups.com<javascript:>
>> To unsubscribe from this group, send email to
>> nodejs+un...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>  
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "nodejs" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to nodejs+un...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to