I understand that NoSQL literally means "no SQL," but typically it's a buzzword reserved for unconventional datastores used under heavy distribution.
Maybe you'd want a local embedded "NoSQL" to act as a local datacache? But then for that use case why create an impedance mismatch with the central datastore by rolling your own?
Jx9? So wait, I need another language to interact with the thing that's already embedded directly within my program?
Local offline data analysis? Now that makes sense. Does this have intelligent/optimized paging mechanisms? I have a feeling not, since the author seems to be couching this as an alternative to sqlite for people who like NoSQL.
I'd sincerely love to hear more about what's motivating this project. Was it just for yucks, or is there some problem that the author(s) needed to solve that wasn't well-solved by another tool?
Serverless NoSQL embedded datastore aren't really that unusual. BerkeleyDB, Tokyo Cabinet, LevelDB are all commonly used serverless NoSQL.
But yeah, requiring a new obscure language pretty much obliterates any reason you'd want to use this. Lua is fast, popular, made for this exact use case and already used by Redis.
I would be more inclined to simply have my object structure in memory, using a more convenient high-level language, and do a load/dump from .json.gz files as needed. It's fast enough, and worst case scenario, I can backup/extract and read/write in any number of programming languages.
If you need multiple records, that may be easier, having an index, and using line delimited flat json structures can work as well... (breaking on \n)
This really seems like an also ran, where you could have abstracted out an SQLite db with a single table of (key VARCHAR(100) PRIMARY KEY, value VARCHAR(4000)) or something similar.
Since the Jx9 language is fully embedded (even stated as " All C source code for UnQLite and Jx9 are combined into a single source file."), they seem to contradicting their own licensing. The resulting library would also retain the copyleft SPL license.
The base code may be BSD, but incorporating the whole database into your code infects it with their SPL too.
http://www.reddit.com/r/programming/comments/1etfxi/sqlite_n... was heavily downvoted for saying its an order of magnitude faster than SQLite
http://www.reddit.com/r/programming/comments/1etkix/unqlite_... raises concerns about the license, and there's a Global Lock in there too? The scripting performance gives cause for pause too.
I love the description of the scripting language as "Turing complete" based on "JSON". That is the first time I have ever heard turing complete used to market a programming language!
The scripting language is incredible, I have never seen a more verbose way to program. It is a scripting language, yet seems to combine JSON, PHP and C standard library functions with C type casting. Look at the samples: http://unqlite.org/jx9_samples.html
I am speechless, the description of the project is the most vacuous collection of buzzwords imaginable. "Built with a powerful disk storage engine which support O(1) lookup." "Support Terabyte sized databases." Of course with a global lock and after taking a look at the scripting language I have reason to doubt the claims made
https://code.google.com/p/leveldb/
It's also well engineered (written by some of the best Google engineers) and well supported.
Why use something new with no apparent benefits? (and a lot of drawbacks)
http://en.wikipedia.org/wiki/Berkeley_DB
http://en.wikipedia.org/wiki/Kyoto_Cabinet
Edit: For extra points, read this: http://www.aosabook.org/en/bdb.html
There are some decent benchmarks put out by the mdb guys here: http://symas.com/mdb/microbench/ .
> UnQLite is 100% hand-coded, written in ANSI C, Thread-safe, _Full reentrant_ ...
It also uses its own scripting language
> [jx9] uses a clean and familiar syntax similar to C, JavaScript and JSON
The copy on this site leaves me puzzled.
This is useful for small projects that don't need the power of a behemoth like MongoDB and want to be installable by a simple git-clone + npm install
I am very interested in feedback on it! https://github.com/louischatriot/nedb
This UnQLite developer is a first-class tool.
In this case though, it's all embedded so I don't gain any of the benefits.
A good example would be something like an address book data store. Especially if you want it to be dynamic so that the user can add/remove fields (e.g. allowing the user to attach as many phone numbers as they like to the contact, rather than just a static 5 numbers). If you have to implement this in SQLite, then you have to develop the schema for it, and the (de)serialization code. With a document-store, you can just do something like say "store these fields" and you're done with it.
| giving up ACID (yes I know this has it)
If you know that this has ACID, then why are you talking about giving up ACID? The fact that many NoSQL implementations give up ACID doesn't have any bearing on this discussion.http://en.wikipedia.org/wiki/Dbm#Successors
I'm yet to see a good replacement to Kyoto cabinet both in terms of ease of use and performance. I feel it'd be better energy to pick up kyoto cabinet and maintain it than re-write something from scratch.
Can anyone recommend one?
The default BLOB limit is around 1GB.
Where and how would you use it? What, if anything, do you currently use in its place? If nothing, is there something you could use instead? Why is it better than a serializing your own domain model (assuming you have a domain model), or other alternatives?
exactly what you wanted.
It's a real question because I haven't actually used them. SQLite is fine, but if you don't need sql they probably fare better.
from sqliteshelf import SQLiteShelf
d = SQLiteShelf("filename.sdb", "tablename")
# now use d like any other dictionary, but this one has
# persistent storage
https://github.com/shish/sqliteshelfI can't wait for the day malloc appears on a page with bullet points citing all the latest buzzwords.
https://github.com/stochastic-technologies/goatfish
It also supports indexing on arbitrary fields and is only a few lines of code. It did come in very handy.
I'm sure it's much more than that, but one wonders where this stacks up compared to existing solutions.
Someone should write a android/java wrapper for it in the same way Google has a built in wrapper for sqlite.