CodernityDB — pure Python, NoSQL, fast database
labs.codernity.com
labs.codernity.com
- You fsync yourself to ensure durability. I can't see at a glance
what fsync settings are used for the speed tests.
- It's not transactional, although single operations are atomic.
- Indexes operate on a single-writer, multiple reader basis.
- No traditional joins, although you can of course write
a procedural function that joins for you.The other attributes i'm not too fussed about personally, i figure i can always work around them or face the question "am i using the right tool for this job?" but the fsync one still gives me the heeby-jeebies (even though it's never bitten me despite many many TBs of data).
Cassandra does periodic fsync's (although it can be configured). I understand HBase and Mongo have similar shennanigans.
I'll re-open the bug in the morning with a proof-of-concept.
Is the fact that it is written in "pure Python" really the most important thing to reenforce after the name of the product itself?
Why would I use this over established products like Riak, Redis, MongoDB, etc?
It's a library database like sqlite and kyoto cabinet
It's definitely a selling point for Python programmers, because it's so easy to use with your Python projects. You just set the package requirement and you're done, it will work in the same environment wherever your app works, upgrades are a piece of cake, no need to worry about platform support, permissions, etc.
f.ex. Whoosh (full-text search) gained a lot of traction in the Python world not because it was the fastest at the time nor the most full-featured (compared to the more mature Java-based ones), but because of convenience. Such solutions, even when they're not the most advanced player in the league, are great for starting up fast and pushing features out the door.
On a side note, it's a pleasure for me to see it's from Poland. Will test it out on a feature project in the next few days.
In my opinion, it's not "pythonic" to use DBMS, just because it written in python.
So the "selling point" is flawed.
Disclosure: I'm using python since 2006. I've made a lot of evangelizing it. It is my weapon of choice for many tasks. And I will never use python for many other tasks. (Don't tell me about PyPy or Stackless)
[1] Python works well with other languages of course, and is often used as a "glue" between other components.
[2] This assumes that you know Python better than whatever language it was made in, but for many cases that will be true.
[3] I often like to look at libraries just to understand how they work, but that is different. There are often cases, especially where the tool uses some abstraction that can leak, where you need to look under the hood just to get things working.
(We have 45% of .NET-ters, 35% of javers, 20% : devDBAs, Js-ers, others)
My propaganda is always: "Be programmers, mazafakerz!" And python is excellent tool for explaining ideas between this groups. Javer will not be offended if I show him .NET-code and otherwise.
For them python is "executable pseudo-code".
It will be sad for me if pythonistas became a caste like .NET, Java ... and Haskel (they are not a caste but have all possibilities to became one)
I get your point and I'm all in for being language-agnostic when it comes to the tools I have to use, but that doesn't change the fact that convenience plays a role when you are in a point where you can't affort a long-term decision process. the best technology to quickly launch something is most often simply the one you know.
I've been looking at DBM::Deep (one of perl's equivalent to CodernityDB) and App::FatPacker recently just for this case (install a script on some Macs with only Perl being needed requirement).
ref: https://metacpan.org/module/DBM::Deep | https://metacpan.org/module/App::FatPacker
It is for me. It's the most unique attribute about the project. Fast? Yawn. NoSQL? Yawn.
Basically conflating the idea that NoSQL is for 'real projects' and that only 'amateur hour' hosts have no compiler.
add repository.... {apt-get,yum,brew,port} install {mongodb,riak,redis}
I see little benefit in compiling any of these products from source.
"Indexes tries to reuse as much space as possible, because metadata size is fixed, during every write operation, if index finds metadata marked as removed or so, it reuses it - writes new data into that place."
I'm curious how this is implemented.
http://labs.codernity.com/codernitydb/design.html#how-it-s-b...
[1]: I guess it's possible that 'Chinese' might be close too, but I have no idea how the different dialects (Mandarin/Cantonese) would affect this.
Cantonese isn't written down, strictly speaking; when you write Chinese, there aren't dialectic differences.
Also: Don't blame people for english lang proficiency.
This is true. It is also true that I am not able to use it at present because I don't understand the documentation.
A large part of modern programming is getting one's code to work with external libraries. For this to be a joy (and not a pain) the library's API should be simple and the documentation well-written.
I'm sure I could understand this library, if I put effort into it. However doing that has added problems -- I might subtly misunderstand it in ways that my code works most of the time but not always. And why should I bother? Python comes with multiple ways of storing data, such as sqlite, which I've used before and like.
This is not to knock the people behind CodernityDB which for all I know might be an excellent product. But at the moment it's not one I would consider using.
Of course, if we won't help with problem in an open source project, we shouldn't feel entitled to a fix either.