Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a comparison to similar NoSQL databases to the docs and readme file #1

Open
thedrow opened this issue Oct 27, 2013 · 9 comments
Open

Comments

@thedrow
Copy link

thedrow commented Oct 27, 2013

It's much easier to understand how a new tool works if you can read how it behaves differently from other tools we've already used.
I'd like to see a comparison with Redis for example.

@tammet
Copy link
Collaborator

tammet commented Oct 27, 2013

10/27/2013 3:06 AM, Omer Katz kirjutas:

It's much easier to understand how a new tool works if you can read how
it behaves differently from other tools we've already used.
I'd like to see a comparison with Redis for example.

A good idea. Will attempt to add some brief comparisons with, say,
redis, mongodb, Tokyo cabinet and neo4j in near future. However, this
might easily open a can of worms with people being unhappy about the way
we present the differences, i.e. like one guy wants to stress features A
and B of redis, another features C and D, etc etc.

Very briefly said, redis is an advanced distributed key-value cache
server like memcached, whitedb is a graph/N-tuples database shared
memory library, like sqlite without SQL but with record pointers and
operating in shared memory, not files.

The main differences with Redis are imho these:

  • redis is a key-value base (search a value assigned to a given key)
    whitedb is an N-tuple base (search from any of the fields in a tuple for
    a whole tuple of values)
  • in other words, redis allows to search only by the exact unique key in
    the hash, whitedb allows to search also for a set of equal or
    smaller/greater values from a T-tree index, from any field, like
    conventional relational databases.
  • redis is a database server to which clients connect over tcp/ip.
    whitedb is a library with no running server process: processes using the
    whitedb library access data stored in a shared memory segment.
  • for most operations whitedb is faster than redis: no time is spent on
    client/server connections.
  • redis has a machinery for partioning data over several redis instances
    (machines), whitedb has no such mechanism: all the data is stored in one
    machine.
  • redis has transactions (atomic sequences of updates, yet no
    rollbacks), whitedb has no transactions and relies on read/write locks
    only (different locking strategies available).
  • the persistance mechanisms (storing to disk) are similar for redis and
    whitedb: both offer database dumps/snapshots and logging on demand.

Tanel

@thedrow
Copy link
Author

thedrow commented Oct 27, 2013

Can you add to each comparison what are the advantages and disadvantages of replacing X with WhiteDB for the typical use case of X?
Suggesting hybrid approaches where appropriate or recommending to use X or WhiteDB entirely for that use case will certainly contribute to the adoption of WhiteDB.

Also, benchmarks for using WhiteDB over X for the typical use case of X can be useful.

It is also important to highlight what differences are by design and what might be implemented in the feature (with links to issues if applicable). For example is the lack of partitioning by design? If so, why? If we need partitioning should we prefer Redis or should that feature be emulated?

You get the idea right?

Overall you have a great product here but I can't really tell if I should be using it instead of or in addition to another tool.

@thedrow
Copy link
Author

thedrow commented Oct 27, 2013

Regarding the can of worms remark, the documentation should include all differences. If a user wants to highlight another use case it should be added to the documentation/wiki. This is open source right? Pull requests are welcome :)

@tammet
Copy link
Collaborator

tammet commented Oct 27, 2013

10/27/2013 2:19 PM, Omer Katz kirjutas:

Can you add to each comparison what are the advantages and disadvantages
of replacing X with WhiteDB for the typical use case of X?
Suggesting hybrid approaches where appropriate or recommending to use X
or WhiteDB entirely for that use case will certainly contribute to the
adoption of WhiteDB.

Also, benchmarks for using WhiteDB over X for the typical use case of X
can be useful.

It is also important to highlight what differences are by design and
what might be implemented in the feature (with links to issues if
applicable). For example is the lack of partitioning by design? If so,
why? If we need partitioning should we prefer Redis or should that
feature be emulated?

You get the idea right?

Overall you have a great product here but I can't really tell if I
should be using it instead of or in addition to another tool.

Sure, just that writing down all these comparisons, suggestions and
benchmarks is a massive amount of work which we would love to do but
most likely just cannot in such detail :). Now, it would be a great
project for a student: I'll probably really propose it to my students as
a possible thesis subject.

Tanel

@tammet
Copy link
Collaborator

tammet commented Oct 27, 2013

10/27/2013 2:25 PM, Omer Katz kirjutas:

Regarding the can of worms remark, the documentation should include all
differences. If a user wants to highlight another use case it should be
added to the documentation/wiki. This is open source right? Pull
requests are welcome :)

Exactly. You are most welcome to add to the documentation!

What I wanted to stress is that our small team cannot realistically
"include all differences": there are far too many database systems, far
too many differences and aspects of these differences for us to cover
even a small percentage in sufficient detail :)

Tanel

@thedrow
Copy link
Author

thedrow commented Oct 27, 2013

I will if I'll end up using WhiteDB. Right now I just need a basic comparison or a use case so I'll know when should I introduce WhiteDB. Instead of memcached? Redis? Neo4J? In scenario X where all of those options are not optimal?

@tammet
Copy link
Collaborator

tammet commented Oct 27, 2013

10/27/2013 2:45 PM, Omer Katz kirjutas:

I will if I'll end up using WhiteDB. Right now I just need a basic
comparison or a use case so I'll know when should I introduce WhiteDB.
Instead of memcached? Redis? Neo4J? In scenario X where all of those
options are not optimal?

Please be more concrete. Which of the ones above you actually use and
for what. I'd say that in most cases where you already use one of these
systems and are satisfied, just go on and continue using what works for
you. You should probably not use whitedb if you cannot clearly see the
benefits for your concrete project yourself.

Tanel

@thedrow
Copy link
Author

thedrow commented Oct 27, 2013

I mean, it's unclear what kind of problem WhiteDB is trying to solve.

@tammet
Copy link
Collaborator

tammet commented Oct 27, 2013

For an example of a class of problems WhiteDB is particularly well suited for, please have a look at Enar Reilent's Ph.D thesis "Whiteboard Architecture for the Multi-agent Sensor Systems" pointed to at the front page as http://whitedb.org/doc/Reilent_phd_thesis.pdf. It covers the issues and possible solutions in situations where a number of different software agents communicate information between each other.

priitj pushed a commit that referenced this issue Oct 2, 2014
Fix compilation not working correctly with other compilers than gcc.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants