News for hackers. Stuff that matters.
Re:MongoDB 1.8 (stable) released by davidw on Wednesday March 16, 2011 @04:04PM (#2333631)
MongoDB is not something I have a good handle on yet. What's its sweet spot? Where should I consider using it instead of Postgres?
Re:MongoDB 1.8 (stable) released by chadcf on Wednesday March 16, 2011 @10:19PM (#2334830)
I've used it once, for an app that holds data which was not a good fit for a traditional relational database. The app in question essentially involved collecting data in a web app and then using that data to fill out hundreds of PDF forms. It gets really complicated as the data has to be potentially formatted (say a phone number might need to be split 555-555-5555 on one form but one number per square on another), concatenated (name might need to join first, last mi), as well as data about what page and x/y coordinates things go on for each form.

Initial attempts in SQL were painful. The only real way to do it was a key value table, but that gets painful when it comes to formatting for web presence (notably, each document has sections with a group of fields, plus some fields may need to be grouped together such as a series of checkboxes, or parts of a name). So at that point we're looking at writing up XML files to describe the presentation of these 200 forms from a key/value table to the web app.

At that point I realized this was doable, but going to be a mess. Enter mongo. Mongo essentially let's us store a dynamic schema of documents. For each form we can stick it all in a single document, as a series of embedded models, with all metadata and values needed in one go. We also get nice revision control within that using mongoid. We can now fetch all the data for a form, as well as save all the data for the form, in one VERY fast atomic operation (we're talking 100-800 field definitions for each form). Having never used mongo, it only took me a few days to implement this complete with handling for all field types and performance was fantastic.

Mongo also made it quite easy to populate our data since we're essentially just storing a tree of key and values. We wrote up a tool that loads up the PDF's and let's us draw boxes on top of the fields and set up the metadata, then export that to a YAML file for each form. The YAML is then stored in a tradiational SQL database and is used to create a new form in the system by simply converting it to a nested hash and having mongoid save it. Slick.

I'm getting a bit wordy here, but I think it's a great real world example of the type of problem mongo is a good fit for. I wouldn't personally use mongo for something that a relational database is a good fit for, but for something like this it allows you to solve the problem quicker and with significantly less code to maintain (really, the CRUD code for forms is no more than with SQL and probably less since it's only one operation on a document, and my pdf form generator is < 200 lines of ruby).

Re:MongoDB 1.8 (stable) released by kchodorow on Wednesday March 16, 2011 @04:10PM (#2333666)
A lot of people like it because it makes development faster. It's like the scripting language of databases: you can get stuff out the door really fast (with the obvious power/responsibility caveats).
Re:MongoDB 1.8 (stable) released by DonnyV on Wednesday March 16, 2011 @04:24PM (#2333721)
This was the main reason why I picked it for a project. Its just sick the amount of code you DON'T have to write to use this database. I literally have 1 class called GenericCRUD with 5 functions that do all my database functions for all my models. Plus not having to worry about stored procedures anymore is a heavy weight lifted off your shoulders.
Re:MongoDB 1.8 (stable) released by wladimir on Thursday March 17, 2011 @04:01AM (#2335420)
It's schema-less, and as the data format is a binary form of JSON, you can store arbitrary, even nested data structures directly. Indexes can be put on fields deep within the structure.

This saves a lot of time you'd normally spent defining schemas, and is very flexible. It didn't completely replace SQL for me, but it's a good fit for the heterogeneous free-form data generally encountered on the web.

Re:MongoDB 1.8 (stable) released by scorpioxy on Wednesday March 16, 2011 @05:52PM (#2334129)
I use it for offline operations since we only have a single overloaded MS SQL database server. So i sync the data to my local mongo instance creating documents with only the fields that i need. And i have scripts written to do analytics and partition the data to reveal patterns and generate reports and so on.

It's very fast and the flexible schema makes the code much more flexible and easy to write. And did i mention it was fast?

You should definitely give it a try and consider using it for such systems.

My only issue with it is that i am running it on a 32-bit system and so i'm limited to 2GB a database.

Re:MongoDB 1.8 (stable) released by flourophore on Wednesday March 16, 2011 @05:54PM (#2334133)
If you are in the NYC area, you should check out the MongoDB track at PgEast next week to find out ;) https://www.postgresqlconference.org/
Re:MongoDB 1.8 (stable) released by andrewjshults on Wednesday March 16, 2011 @04:17PM (#2333696)
If you are working with location data, Mongo has built in geospatial indexing built in since 1.4 (earlier in the unstable builds) - http://www.mongodb.org/display/DOCS/Geospatial+Indexing which has been a big draw for a number of people I know using it (it looks like 1.8 brings spherical distances to the stable branch which makes the geo lookups a lot more useful if you need accurate distances and not just near by lookups).
Re:MongoDB 1.8 (stable) released by look_lookatme on Wednesday March 16, 2011 @05:56PM (#2334142)
In reference to the OP, when comparing Mongo and Postgres, I wouldn't bring up geo...
Re:MongoDB 1.8 (stable) released by igrekel on Wednesday March 16, 2011 @04:34PM (#2333769)
Interesting I was planning to toy with location data, do you know how it compares with Postgresql extension PostGIS?
Re:MongoDB 1.8 (stable) released by crux_ on Wednesday March 16, 2011 @05:10PM (#2333938)
If by "location data" you have points, and the only location operations you need are distance or bounding-box searches, it may do the trick.

If you're interested in polygons, lines, etc; more physically accurate (and completely implemented) distance queries, spatial joins, aggregation, 3D and surveyor-annotated data, set-theoretic operations ... PostGIS is far and away the way to go. It's far more mature and debugged than any of the NoSQL geospatial stuff I've seen, not only WRT correctness but also performance.

As a point of reference: There's a growing legion of geographers who do all their vector work in SQL using PostGIS.

All that said, for some applications, being tied to the relational model is a deal breaker. Just know that in terms of capability and maturity on the geospatial front, you'll be trading off a Cadillac for a partially assembled rocket sled.

Re:MongoDB 1.8 (stable) released by crux_ on Wednesday March 16, 2011 @04:38PM (#2333782)
I got excited and looked it up.

> We don't currently handle wrapping at the poles or at the transition from -180° to +180° longitude, however we detect when a search would wrap and raise an error.

generalized grumble

Why does everyone always seem to punt on doing geospatial right? It's not _that_ hard.

Re:MongoDB 1.8 (stable) released by gt384u on Thursday March 17, 2011 @01:23AM (#2335177)
Why not go ahead and help them? I'm sure they'd be happy to have the assistance. Fork mongo from github at https://github.com/mongodb/mongo . Happy hacking!
Re:MongoDB 1.8 (stable) released by crux_ on Thursday March 17, 2011 @12:15PM (#2336664)
You know, nobody ever replies to these comments with an "I will", but I'm seriously considering it.

(It's a nice opportunity to publicly show off a specialty/core competency and brush up a bit on C++ a the same time. I'm not that easily provoked into action by internet commentary! ;) )

But, looking at the source, I think I will be probably a Bad Contributor and end up with a gigantic pull request and a (mostly) full re-implementation...

Re:MongoDB 1.8 (stable) released by thibaut_barrere on Thursday March 17, 2011 @05:51AM (#2335587)
> Why does everyone always seem to punt on doing geospatial right? It's not _that_ hard.

Do you mean you think they don't know how to do it?

As I followed the roadmap on this specific point, it looks more like an incremental development to me: they first used rectangular coordinates in 1.6, then a spherical model in 1.7 etc.

It allows to bring a more lightweight solution quickly to people that need it (like me), then to evolve based on the feedback etc.

Re:MongoDB 1.8 (stable) released by crux_ on Thursday March 17, 2011 @11:18AM (#2336382)
The problem I have is at least partly one of truth in advertising.

For example: If they were truly using a "spherical model", then one would not expect to have queries fail at the poles & dateline, would you?

At least it is documented and fails hard with an error rather than giving wrong results, so a developer can quickly figure out the weak spots --- though I bet a lot of people would prefer the wrong results to queries that cause exceptions in their systems.

> Do you mean you think they don't know how to do it?

I think it has more to do with the absurdly low bar they've set for themselves to check the "geospatial" box than it does with competence.

Re:MongoDB 1.8 (stable) released by thibaut_barrere on Thursday March 17, 2011 @12:04PM (#2336596)
I don't know really - if limitations are documented like they are apparently, it's really not an issue for me - I don't feel cheated (but it's really an opinion!).

Your mileage may vary as they say: I used the GIS since 1.6 and it was very helpful for me in this form already :)

Re:MongoDB 1.8 (stable) released by crux_ on Thursday March 17, 2011 @12:29PM (#2336735)
The limitations are documented as foot/side notes.

Analogy: It's like seeing "ACID compliance!" on a feature list, then finding buried in the documentation that is only the case for single-document transactions in unordered collections on a single machine only.

The new feature might be useful to some but including it on a feature list without disclaimer is misleading.

Re:MongoDB 1.8 (stable) released by thibaut_barrere on Thursday March 17, 2011 @01:46PM (#2337114)
I understand your analogy really :)

Really curious: are you using mongo currently? Or browsing the docs?

Re:MongoDB 1.8 (stable) released by crux_ on Thursday March 17, 2011 @02:45PM (#2337435)
I'm not using it directly, but sometimes I use tools that in turn use mongo. -- So for now, browsing docs.
Re:MongoDB 1.8 (stable) released by joegester on Thursday March 17, 2011 @03:20PM (#2337590)
My experience has been that many applications (web apps in particular) use a relational database to break up documents into an SQL schema so they can be indexed, then assemble them again when needed. Mongo really ratchets down the friction on that operation. Instead of spending time building a schema and writing lots and lots of insert and update statements, you just build a JSON object and send it over.
Re:MongoDB 1.8 (stable) released by yawniek on Wednesday March 16, 2011 @04:07PM (#2333646)
some of the sweet spots where it _might_ be better in than postgres are:

- horizontal scalability

- flexible datastructures

- map/reduce

Re:MongoDB 1.8 (stable) released by thibaut_barrere on Thursday March 17, 2011 @05:53AM (#2335594)
For me the sweet spot is its flexibility.

I work a lot on data aggregation, where I can create a bunch of tables each day, then maintain them etc. For me it's almost a dream really :)

As well they are adding features such as geonear that makes it appealing for other uses (which I have, too).

Re:MongoDB 1.8 (stable) released by rbranson on Wednesday March 16, 2011 @04:37PM (#2333780)
It is good at web scale.