NoSQL的概念是在2009年提出的,它最常见的解释是“non-relational”,而“Not Only SQL”也是一种被广泛接受的解释方式。NoSQL最常见的实现方式是key-value存储,当然还有其他的文档型、列存储、图型数据库、xml数据库等。在NoSQL概念提出之前,这些数据库就已经被广泛应用于各种系统当中,但是却很少用于web互联网应用。例如cdb、qdbm、bdb等数据库。
传统的关系型数据库具有不错的性能、高稳定性和久经历史考验等优点,同时使用简单、功能强大,并且积累了大量的成功案例。在互联网领域,MySQL成为了绝对靠前的王者,为互联网的发展做出了卓越的贡献。在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在这个时期内,更多的都是静态网页,动态交互类型的网站不多。
然而到了最近10年,随着各种社交网络和微博等应用程序的兴起,网站开始快速发展。论坛、博客、sns等应用程序逐渐引领了web领域的潮流。在初期,论坛的流量其实也不大,如果你接触网络比较早,你可能还记得那个时候还有文本型存储的论坛程序,可以想象一般的论坛的流量有多大。
为了缓解MySQL架构下网站数据库出现的性能问题并优化数据库结构和索引,程序员们开始大量使用缓存技术来减轻数据库压力。最初流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大时,多台web机器通过文件缓存不能共享,大量小文件缓存也带来了较高IO压力。在这个时候,Memcached自然成为了一种非常时尚的技术产品。
您好,分库分表是一种数据库水平扩展技术,通过将数据库中的数据分散存储在多个数据库实例中,从而解决单机数据库容量和性能瓶颈问题。
分库分表通常采用水平分库和垂直分表两种方式。 水平分库是指将数据表中的数据按行进行拆分,存储在不同的数据库实例中;垂直分表是指将数据表中的数据按列进行拆分,存储在不同的数据库实例中。
分库分表技术可以有效提升数据库的并发处理能力和存储容量,但同时也增加了数据库的管理复杂度,需要考虑数据一致性、故障处理和性能优化等问题。
MySQL和NoSQL都是数据库管理系统,但是它们有一些区别。MySQL是一个基于表格设计的关系数据库,而NoSQL本质上是非关系型的基于文档的设计。MySQL的严格模式限制并不容易扩展,而NoSQL可以通过动态模式特性轻松扩展 。
NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀 。
Query Cache是MySQL提供的一种缓存机制,它可以将查询结果缓存起来,以便下次查询时可以直接从缓存中获取结果集,从而提高查询效率。
query cache(查询缓存)的优点非常明显,对于那些经常执行select操作的表来说,MySQL可以直接从缓存中返回相应的结果集,而无需再从表中获取数据,这样可以显著减少IO开销。然而,尽管query cache的收益显而易见,我们也不能忽视它所带来的一些缺点:
1. query语句的hash计算和hash查找所带来的资源消耗。MySQL会对每条接收到的select类型的query进行hash计算然后查找该query的cache是否存在。虽然hash计算和查找的效率已经足够高了,一条query所带来的消耗可以忽略不计,但一旦涉及到高并发,有成千上万条query时,hash计算和查找所带来的开销就变得不可忽视了;
2. query cache的失效问题。如果表的变更比较频繁,那么query cache的失效率就会非常高。表的变更不仅仅指表中的数据发生变化,还包括结构或者索引的任何变化;
3. 对于不同sql但同一结果集的query都会被缓存,这样便会造成内存资源的过渡消耗。sql的字符大小写、空格或者注释的不同,缓存都是认为是不同的sql(因为他们的hash值会不同)。
NoSQL数据库无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。这与关系数据库中,增加或删除字段是一件非常麻烦的事情形成鲜明对比。如果是数据量非常大的表,增加字段简直就如同噩梦一般。这一点在大数据量的web2.0时代尤其明显。
NoSQL在不影响性能的情况下,可以方便地实现高可用架构。例如Cassandra和HBase等模型,通过复制模型也能实现高可用。
总结来说,NoSQL数据库的出现弥补了关系数据(如MySQL)在某些方面的不足,同时也极大地节省了开发成本和维护成本。MySQL和NoSQL各有其特点和适用的应用场景,两者的紧密结合将为web2.0的数据库发展带来新的思路。让关系型数据库关注在关系上,NoSQL关注在存储上。