Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'll just put a few points here to understand when you should use which architecture.

NoSQL:

- reading is fast, writing is expensive (if all data are pre-processed/denormalized for reading during the writing phase)

- often schema-less

- low latency (for key-value storage)

- offline batch processing (classical Map Reduce)

- no ACID, choose 2 of 3 in CAP

- demanding on SW engineers to get client-side conflict resolution, tricky in general

- Petabytes of data can be suddenly processed

- huge variation of different paradigms, key-value, document, graph, batch etc.

- haywire indexing

SQL:

- writes are fast (normalization), reads are expensive (JOINs)

- ACID (well, only to some extent, clustering messes up many ACID properties unfortunately and conflicts arise in corner cases)

- set operations and a neat math theory behind them

- stable indexing, easily constructable real-time JOINs

- OLTP

- easier for developers

- non-flexible schema

- tradition, well-known recipes on how to do things

Basically, if you want to have low-latency access, your concurrency model allows eventual consistency, or you have a need to store your data in non-standard structure such as graphs/trees, use NoSQL and pre-process all data to be exactly in the format you require for reading.

If you need 99.999% guarantee of consistent data, amount of data you need to handle is under 50TB, you can put your data into a fixed schema and latency doesn't matter that much, use SQL.

I would recommend you to ask yourself a question - is your app/business read-heavy or write-heavy and decide accordingly.



Consider applying for YC's Winter 2027 batch! Applications are open till November 2.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: