Tiedot - Your NoSQL document database engine powered by Go
github.com
github.com
My company currently is using Go to monitor and respond to events on hundreds of thousands of RabbitMQ message queues. We create a goroutine for handling each queue, and Go handles all of the concurrency and threading in the runtime while avoiding the resource overhead of standard threads. All of this is done in an application that took about 6 hours to write.
It really made a difference in our experience.
One specific test uses approximately 20k goroutines and averages 15-20MB RAM depending on test load. As for CPU utilization, the impact is minimal; RabbitMQ is the biggest bottleneck, as our peak message throughput for a single RabbitMQ broker is about 50k/messages per second, which our go process is able to handle without much issue. The worst-case scenario that I've been able to test for is one where those 50k messages are evenly spread across different queues; even then, our CPU utilization wasn't any higher than 15%/core on a 12-core server.
In [2], wondering why you make GOMAXPROCS=2*Cpu by default?
[1]: https://github.com/aybabtme/dskvs/blob/proto/
[2]: https://github.com/HouzuoGuo/tiedot/blob/master/src/loveonea...
Regarding point 2, I made a note here:
https://github.com/HouzuoGuo/tiedot/wiki/Embedded-Usage
I experiment with different GOMAXPROCS settings on three machines and noticed that 1CPU does not run tiedot to its full potential, 3CPU seems to be slower than 2*CPU.
* http://dustin.github.io/2012/09/09/seriesly.html
* https://github.com/couchbaselabs/sync_gateway
cbgb is an API compatible Couchbase implementation in go. We use it in place of couchbase when we need something tiny to play around with.
seriesly is a time series database for storing and aggregating sample data and doing things like this: http://bleu.west.spy.net/~dustin/seriesly/
sync_gateway is how our mobile team synchronizes data across all your phones and tablets and your central DB.
At 20, I just did whatever the hell I wanted, bummed around Europe before figuring out where to do my masters. Responsibility was not paramount on my mind. Maybe 20 something's today are different, but not the ones I know, it's still all about having fun, learning new stuff and exploring the possibilities.
I fail to see how anyone could not have understood what the comment meant.
As an aside, this project is interesting. I've been kinda curious of experimenting on a project like this on my own. However, I wish the author's documentation opened with what ideas from what papers inspired the project.
This should be an easy weekend read http://www.golang-book.com/
http://hopper.si.edu/wiki/mmti/Starbase
Starbase is pattered after "/rdb", a flat-file relational database adhering to the Unix-philosophy, ie., piping together small, single-purpose tools. The approach is covered in "Unix Relational Database Management" ( http://www.amazon.com/Relational-Database-Management-Prentic... ), a book which anticipated the "suckless" movement by a couple of decades ( http://suckless.org/philosophy ).
It would be nice to see something like /rdb, except with: 1. Better transparent support for optional indexes when querying. 2. Automatic updating of indexes when deleting/updating data. 3. Scripts included in the package written in "rc" rather than "sh". 4. BSD license.
Perhaps something like tiedot could be built on top of the above: a single, statically-compiled binary to expose the flat file database through a JSON/REST interface and to honor the Unix user/group table-file permissions through standard HTTP authentication. Forms could be designed against the web service while system administration is handled with as much of the unix system as possible.
Such a stack would be great for smaller start ups and where *nix experience is available.
That said, this looks really interesting. Though I can't imagine for the life of me why you'd indent such a wonderful project with tabs. ;)
https://github.com/HouzuoGuo/tiedot/issues/3
And actually `go fmt` prefers to use tab over spaces ;)
Its a hobby project so I'm going to presume the worst, but I want to know what the author intends to do for each of these.
https://github.com/HouzuoGuo/tiedot/issues/4
Currently, tiedot's stance on ACID is similar to MongoDB's.
I have not spent enough time on the project to support redundancy in it, sorry. I totally agree that redundancy is a must-have if someone wants to use tiedot in serious scenarios, so I will definitely spend time on making this feature available.
Scalability on symmetric multiprocessing architectures has been seriously considered and implemented - basically, tiedot can demonstrate that more CPUs = more performance. However scaling by replication has not been considered yet.
I am completely neutral on which direction you go; my point here is just that if you are just having some fun, you may find replication will turn out to be, well, potentially rather unfun. Educational as can be, though. It's a far, far more subtle problem than initially meets the eye.