I've been hearing things about NoSQL and that it may eventually become the replacement for SQL DB storage methods due to the fact that DB interaction is often a bottle neck for speed on the web.
So I just have a few questions:
What exactly is it?
How does it work?
Why would it be better than using a SQL Database? And how much better is it?
Is the technology too new to start implementing yet or is it worth taking a look into?
Why aren't OODBMS as widespread as RDBMS?
Search-friendly way to store checkbox values in MySQL?
- What exactly is it?.
Using Application Id Generator vs. Database Id Generator
On one hand, a specific system, but it has also become a generic word for a variety of new data storage backends that do not follow the relational DB model..
How can I include my database in the continuous integration process?
- How does it work?.
How I can make Recycle Bin for Database ِApplication?
Each of the systems labelled with the generic name works differently, but the basic idea is to offer better scalability and performance by using DB models that don't support all the functionality of a generic RDBMS, but still enough functionality to be useful.
Storing Data in MS Access and Querying it in Excel
In a way it's like MySQL, which at one time lacked support for transactions but, exactly because of that, managed to outperform other DB systems.
Should I generate a complex object in the database or data access layer?
If you could write your app in a way that didn't require transactions, it was great..
Log to a database using log4j
- Why would it be better than using a SQL Database? And how much better is it?. It would be better when your site needs to scale so massively that the best RDBMS running on the best hardware you can afford and optimized as much as possible simply can't keep up with the load.
How much better it is depends on the specific use case (lots of update activity combined with lots of joins is very hard on "traditional" RDBMSs) - could well be a factor of 1000 in extreme cases..
- Is the technology too new to start implementing yet or is it worth taking a look into?. Depends mainly on what you're trying to achieve.
It's certainly mature enough to use.
But few applications really need to scale that massively.
For most, a traditional RDBMS is sufficient.
However, with internet usage becoming more ubiquitous all the time, it's quite likely that applications that do will become more common (though probably not dominant)..
There is no such thing as NoSQL!NoSQL is a buzzword.. For decades, when people were talking about databases, they meant relational databases.
And when people were talking about relational databases, they meant those you control with Edgar F.
Codd's Structured Query Language.
Storing data in some other way? Madness! Anything else is just flatfiles.. But in the past few years, people started to question this dogma.
People wondered if tables with rows and columns are really the only way to represent data.
People started thinking and coding, and came up with many new concepts how data could be organized.
And they started to create new database systems designed for these new ways of working with data.. The philosophies of all these databases were different.
But one thing all these databases had in common, was that the Structured Query Language was no longer a good fit for using them.
So each database replaced SQL with their own query languages.
And so the term NoSQL was born, as a label for all database technologies which defy the classic relational database model..
So what do NoSQL databases have in common?Actually, not much.. You often hear phrases like:.
- NoSQL is scalable!
- NoSQL is for BigData!
- NoSQL violates ACID!
- NoSQL is a glorified key/value store!
Actually, the only thing NoSQL databases have in common, is that they are databases which do not use SQL.
The only thing that defines them is what sets them apart from each other..
So what sets NoSQL databases apart?So we made clear that all those databases commonly referred to as NoSQL are too different to evaluate them together.
Each of them needs to be evaluated separately to decide if they are a good fit to solve a specific problem.
But where do we begin? Thankfully, NoSQL databases can be grouped into certain categories, which are suitable for different use-cases:. Document-oriented. Examples: MongoDB, CouchDB. Strengths: Heterogenous data, working object-oriented, agile development. Their advantage is that they do not require a consistent data structure.
They are useful when your requirements and thus your database layout changes constantly, or when you are dealing with datasets which belong together but still look very differently.
When you have a lot of tables with two columns called "key" and "value", then these might be worth looking into.. Graph databases. Examples: Neo4j, GiraffeDB.. Strengths: Data Mining. While most NoSQL databases abandon the concept of managing data relations, these databases embrace it even more than those so-called relational databases.
. Their focus is at defining data by its relation to other data.
When you have a lot of tables with primary keys which are the primary keys of two other tables (and maybe some data describing the relation between them), then these might be something for you.. Key-Value Stores. Examples: Redis, Cassandra, MemcacheDB. Strengths: Fast lookup of values by known keys. They are very simplistic, but that makes them fast and easy to use.
When you have no need for stored procedures, constraints, triggers and all those advanced database features and you just want fast storage and retrieval of your data, then those are for you.. Unfortunately they assume that you know exactly what you are looking for.
You need the profile of User157641? No problem, will only take microseconds.
But what when you want the names of all users who are aged between 16 and 24, have "waffles" as their favorite food and logged in in the last 24 hours? Tough luck.
When you don't have a definite and unique key for a specific result, you can't get it out of your K-V store that easily..
Is SQL obsolete?Some NoSQL proponents claim that their favorite NoSQL database is the new way of doing things, and SQL is a thing of the past.. Are they right?. No, of course they aren't.
While there are problems SQL isn't suitable for, it still got its strengths.
Lots of data models are simply best represented as a collection of tables which reference each other.
Especially because most database programmers were trained for decades to think of data in a relational way, and trying to press this mindset onto a new technology which wasn't made for it rarely ends well.. NoSQL databases aren't a replacement for SQL - they are an alternative.. Most software ecosystems around the different NoSQL databases aren't as mature yet.
While there are advances, you still haven't got supplemental tools which are as mature and powerful as those available for popular SQL databases.. Also, there is much more know-how for SQL around.
Generations of computer scientists have spent decades of their careers into research focusing on relational databases, and it shows: The literature written about SQL databases and relational data modelling, both practical and theoretical, could fill multiple libraries full of books.
How to build a relational database for your data is a topic so well-researched it's hard to find a corner case where there isn't a generally accepted by-the-book best practice.. Most NoSQL databases, on the other hand, are still in their infancy.
We are still figuring out the best way to use them..
. At the very heart of the NoSQL philosophy lies the consideration that, possibly for commercial and portability reasons, SQL engines tend to disregard the tremendous power of the UNIX operating system and its derivatives.. With a filesystem-based database, you can take immediate advantage of the ever-increasing capabilities and power of the underlying operating system, which have been steadily increasing for many years now in accordance with Moore's law.
With this approach, many operating-system commands become automatically also "database operators" (think of "ls" "sort", "find" and the other countless UNIX shell utilities).
. With this in mind, and a bit of creativity, you can indeed devise a filesystem-based database that is able to overcome the limitations of many common SQL engines, at least for specific usage patterns, which is the whole point behind NoSQL's philosophy, the way I see it.. I run hundreds of web sites and they all use NoSQL to a greater or lesser extent.
In fact, they do not host huge amounts of data, but even if some of them did I could probably think of a creative use of NoSQL and the filesystem to overcome any bottlenecks.
Something that would likely be more difficult with traditional SQL "jails".
I urge you to google for "unix", "manis" and "shaffer" to understand what I mean..
Document databases come to mind, databases without a specific structure, and which don't use SQL as a specific query language.. It's generally better suited to web applications that rely on performance of the database, and don't need more advanced features of Relation Database Engines.
For example, a Key->Value store providing a simple query by id interface might be 10-100x faster than the corresponding SQL server implementation, with a lower developer maintenance cost.
. One example is this paper for an OLTP Tuple Store, which sacrificed transactions for single threaded processing (no concurrency problem because no concurrency allowed), and kept all data in memory; achieving 10-100x better performance as compared to a similar RDBMS driven system.
Basically, it's moving away from the 'One Size Fits All' view of SQL and database systems.
This is a departure from the traditional SQL access which is only good enough for alphanumeric values.
Not only the internal storage and access strategy but also the syntax and limitations on the display format restricts the traditional SQL.
BLOB implementations of traditional relational databases too suffer from these restrictions.
. Behind the scene it is an indirect admission of the failure of the SQL model to support any form of OLTP or support for new dataformats.
"Support" means not just store but full access capabilities - programmatic and querywise using the standard model.
. Relational enthusiasts were quick to modify the defnition of NoSQL from Not-SQL to Not-Only-SQL to keep SQL still in the picture! This is not good especially when we see that most Java programs today resort to ORM mapping of the underlying relational model.
A new concept must have a clearcut definition.
Else it will end up like SOA.
. The basis of the NoSQL systems lies in the random key - value pair.
But this is not new.
Traditional database systems like IMS and IDMS did support hashed ramdom keys (without making use of any index) and they still do.
In fact IDMS already has a keyword NONSQL where they support SQL access to their older network database which they termed as NONSQL..
It's not just a specific technology, but rather a specific type of technology, in this case referring to large-scale (often sparse) "databases" like Google's BigTable or CouchDB..
Though they profess, "NoSQL essentially has no arbitrary limits, and can work where other products can't.
For example there is no limit on data field size, the number of columns, or file size" , I don't think it is the large scale database of the future.
. As Joel says, massively scalable databases like BigTable or HBase, are much more interesting.
GQL is the query language associated with BigTable and App Engine.
It's largely SQL tweaked to avoid features Google considers bottle-necks (like joins).
However, I haven't heard this referred to as "NoSQL" before..
Does NoSQL mean non-relational database?.Yes, NoSQL is different from RDBMS and OLAP.
It uses looser consistency models than traditional relational databases.
. Consistency models are used in distributed systems like distributed shared memory systems or distributed data store..
How it works internally?.NoSQL database systems are often highly optimized for retrieval and appending operations and often offer little functionality beyond record storage (e.g.
The reduced run-time flexibility compared to full SQL systems is compensated by marked gains in scalability and performance for certain data models.. It can work on Structured and Unstructured Data.
It uses Collections instead of Tables.
How do you query such "database"?.Watch SQL vs NoSQL: Battle of the Backends; it explains it all..