MongoDB: Replicate data in documents vs. “join”
Posted
by
JavierCane
on Programmers
See other posts from Programmers
or by JavierCane
Published on 2014-04-30T07:05:58Z
Indexed on
2014/05/30
9:37 UTC
Read the original article
Hit count: 225
Disclaimer: This is a question derived from this one.
What do you think about the following example of use case?
- I have a table containing orders.
- These orders has a lot of related information needed by my current queries (think about the products; the buyer information; the region, country and state of the sale point; and so on)
- In order to think with a de-normalized approach, I don't have to put identifiers of these related items in my main orders collection. Instead, I have to repeat all the information for each order (ie: I will repeat the buyer's name, surname, etc. for each of its orders).
- Assuming the previous premise, I'm committing to maintain all the data related to an order without a lot of updates (because if I modify the buyer's name, I'll have to iterate through all orders updating the ones made by the same buyer, and as MongoDB blocks at a document level on updates, I would be blocking the entire order at the update moment).
- I'll have to replicate all the products' related data? (ie: category, maker and optional attributes like color, size…)
- What if a new feature is requested and I've to make a lot of queries with the products "as the entry point of the query"? (ie: reports showing the products' sales performance grouping by region, country, or whatever)
- Is it fair enough to apply the $unwind operation to my orders original collection? (What about the performance?)
- I should have to do another collection with these queries in mind and replicate again all the products' information (and their orders)?
- Wouldn't be better to store a product_id in the original orders collection in order to be more tolerable to requirements change? (What about emulating JOINs?)
- The optimal approach would be a mixed solution with a RDBMS system like MySQL in order to retrieve the complete data?
- I mean: store products, users, and location identifiers in the orders collection and have queries in MySQL like
getAllUsersDataByIds
in which I would perform aSELECT * FROM users WHERE user_id IN ( :identifiers_retrieved_from_the_mongodb_query )
- I mean: store products, users, and location identifiers in the orders collection and have queries in MySQL like
© Programmers or respective owner