似乎有很多新的“NoSQL”类型数据库。 一些流行的是CouchDB,Cassandra和MongoDB。
这些数据库之间有什么区别?它们与传统关系数据库有何不同?通过SQL DB选择NoSQL DB有哪些优缺点?
答案 0 :(得分:4)
NoSQL这个术语涵盖了许多不同的数据存储方法,从最简单的键/值存储到复杂的文档数据库。这是一个引人注目的流行词,但不是非常具有描述性的恕我直言。
如需快速介绍,您可以查看the Wikipedia entry for NoSQL
答案 1 :(得分:3)
同意,问题是“哪个更好,”这是“哪种解决方案或一套解决方案最适合这种特殊情况。”
NoSQL涵盖了许多不同的存储技术,如CouchDB,MongoDB,Cassandra和Solr。
CouchDB和MongoDB存储多维数据结构。 MongoDB也是无架构的。 Cassandra是一个基于列的存储引擎,用于快速检索,Solr帮助解决其他问题,如分面。
NoSQL只是指任何未通过SQL查询进行交互的存储设施。
答案 2 :(得分:1)
他们并不是更好。 NOSQL不涉及任何新的创新或特殊功能。 NOSQL仅指用于某些类型的应用程序的软件产品集合,但不一定彼此具有许多共同点。 NOSQL不一定是指非关系型数据库。
答案 3 :(得分:0)
Folks,现在是一个热门的辩论, SQL或NoSQL,虽然有些人赞赏NoSQL数据库的性能优雅,而其他人则希望使用 SQL或RDBMS 。虽然每个都有其优点和缺点,但我试图用一些观点来简要地对比它。
While RDBMS uses relations and joins to make data simpler in database tables
NoSQL don't use joins for performance.
NoSQL scales freely when we talk in terms of schema and data, while its very tough to scale a RDBMS if data grows.
There are restriction in size of data in RDBMS in terms of data-types capability, files of any size can be used in NoSQL databases.
Data integrity enforcement comes to play only in RDBMS not in NoSQL databases.
ACID is not the cup of tea for NoSQL databases but for RDBMS.
RDBMS supports complex transactions whereas NoSQL keeps mum for transactions.
NoSQL does not support constraints and validations while its the basic ingredient in RDBMS.
Data is not structured in NoSQL but is highly structured in form of tables in RDBMS.
这完全取决于项目的性质和需求,无论是使用SQL还是NoSQL。
答案 4 :(得分:0)
RDBMS是一种完全结构化的数据存储方式。 而NoSQL是非结构化的存储数据的方式。 另一个主要区别是存储的数据量主要取决于系统的物理内存。在NoSQL中,您没有任何此类限制,因为您可以水平扩展系统。
你会发现NoSQL数据库没有什么共同特征。它们大致可分为几类:
键/值存储 Bigtable灵感数据库(基于Google Bigtable论文) Dynamo启发了数据库 分布数据库 文件数据库
答案 5 :(得分:0)
嗯,基本的区别在下面讨论。当然,现在 No-SQL 概念日益流行。但是我们还需要根据项目需求或要求使用哪一个。
1)SQL数据库主要称为 RDBMS 。而NoSQL数据库主要称为非关系或分布式数据库。
2)RDBMS将遵循 ACID 属性,即Atomcity,Consistency,Isolation,Durability。但是在No-Sql中它遵循 CAP (一致性,可用性和分配)。
3)在SQL中,我们仅以Tabular格式存储数据。但是在No-SQL中它使用键值对,文档,图形数据库或宽列存储的集合。所以No-SQL Schema free < / strong>它可以处理结构化,半结构化和非结构化数据。 但是SQL不是Schema free.SQL有预定义模式 .i.e在SQL中如果你有表并且第一列是int数据类型,那么你就不能存储字符串或Float值。
4)RDBMS遵循 SQL (结构化查询语言)来定义和操作数据,这是非常强大的。在NoSQL数据库中,查询专注于文档的收集。有时它也称为 UnQL (非结构化查询语言)。使用UnQL的语法因数据库而异。此外,SQL数据库非常适合复杂的查询密集型环境,而NoSQL数据库不适合复杂的查询。在高级别上,NoSQL没有标准接口来执行复杂查询,NoSQL中的查询本身没有SQL查询语言那么强大。
For Eg..Take Social Eng。网站,我们上传照片/视频/音乐/专辑..等。为此,我们得到评论,回复评论,如..等等。这里我们可以得到数字,特殊字符..,所以几乎我们无法预测可能是什么回复或评论。在这种情况下,我们在下面记录的类型中使用No-SQL来存储注释。
{
user_id: ObjectID("65f82bda42e7b8c76f5c1969"),
update: [
{
date: ISODate("2015-09-18T10:02:47.620Z"),
text: "Nice picture."
},
{
date: ISODate("2015-09-17T13:14:20.789Z"),
text: "1234@some smile symbol"
}
{
date: ISODate("2015-09-17T12:33:02.132Z"),
text: "...Oh my god.."
}
]
}
在上面,如果我们选择SQL,我们不能仅在列中存储注释(上面的文本)。我们需要基于类型进行存储。因此,我们将最终得到具有不同表的连接数的Big复杂查询。但是SQL是适合交易。
5)在大多数情况下,SQL数据库 垂直可扩展 。您可以通过在单个服务器上增加CPU,RAM,SSD等来管理不断增加的负载。另一方面,No-SQL数据库 可水平扩展 。您可以在No-SQL数据库基础架构中轻松添加更多服务器来处理大量流量。
6)SQL数据库最适合 重型跨国 类型的应用程序,因为它更稳定,并承诺数据的原子性和完整性。虽然您可以将NoSQL用于事务处理,但在高负载和复杂事务应用程序中仍然无法比较和稳定。
7)No-SQL的例子是MangoDB,Cassandra..etc,而SQL则是MySQL,SQL Server等。