关系数据库、内存数据库、Nosql区别与联系-_第1页
关系数据库、内存数据库、Nosql区别与联系-_第2页
关系数据库、内存数据库、Nosql区别与联系-_第3页
关系数据库、内存数据库、Nosql区别与联系-_第4页
关系数据库、内存数据库、Nosql区别与联系-_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关系数据库、内存数据库、Nosql 区分与联系关系型数据库和 Nosql 区分或许有人迷惑关系型数据库和非关系型数据库区分,其实非关系型数据库就是 Nosql,所谓Nosql,就是(Not Only SQL),这个问题等价于关系型数据库和 Nosql 区分。Nosql 简介 Redis,Memchche,MongoDb 的区分本质:非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过削减用不到或很少用的功能,来大幅度提高产品性能。存储方式:关系型数据库是以表的形式存储数据的,nosql 不是,它是大块的组合在一起,通常存储在数据集中,用的较多的是 KeyValue 的

2、形式,也有文档结构和图结构存储结构关系型数据库对应的是结构化数据,数据表都预先定义了结构(列的结构),结构描述了数据的形式和内容。这一点对数据建模至关重要,虽然预定义结构带来了牢靠性和稳定性,但是修改这些数据比较困难。而 Nosql 数据库基于动态结构,可以很简洁适应数据类型和结构的变化。关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避开重复,获得精简的空间利用。虽然管理起来很清楚,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而 Nosql 数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写。存储扩

3、展这可能是两者之间最大的区分,关系型数据库是纵向扩展,也就是说想要提高处理力量,要使用速度更快的计算机。由于数据存储在关系表中,操作的性能瓶颈涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而Nosql 数据库是横向扩展的,它的存储自然就是分布式的,可以通过给资源池添加更多的一般数据库来分担负载。查询方式关系型数据库通过结构化查询语言来操作数据库(即 SQL)。SQL 支持数据库 CURD 操作的功能格外强大,是业界的标准用法。而 Nosql 查询以块为单元操作数据,使用的是非结构化查询语言(UnQl) ,它是没有标准的。关系型数据库表中主键的概

4、念对应 Nosql 中存储文档的 ID。关系型数据库使用预定义优化方式(比如索引)来加快查询操作。事务关系型数据库遵循 ACID(原子性,全都性,隔离性,长久性)规章,而 Nosql 数据库遵循BASE(基本可用,软/柔性事务,最终全都性)。由于关系型数据库的数据强全都性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度把握,并且易于回滚事务。而Nosql 数据库是在 CAP(全都性,可用性,分区容忍度)中任选两项,由于基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,但是并不是Nosql 的闪光点。性能关系型数据库为了维护数据的全都性付出了巨大的代价

5、,读写性能比较差。在面对高并发读写性能差,面对海量数据的时候效率格外低。而 Nosql 存储的格式都是 key-value 类型的, 并且存储在内存中,格外简洁存储,而且对于数据的全都性是弱要求。Nosql 无需 sql 的解析,提高了读写性能。授权方式关系型数据库通常有 SQL Server,Mysql,Oracle。主流的 Nosql 数据库有 redis, memcache,MongoDb。大多数关系的关系型数据库都是付费并且价格昂贵,成本较大,而Nosql 数据库通常都是开源的。内存数据库和 Nosql 区分nosql 数据库与内存数据库Nosql 与内存数据库有交集,nosql 不肯

6、定是内存数据库(如 mongodb 是文档型数据库),内存数据库不肯定是 Nosql,存在关系型的内存数据库,如 SQLite,MySQL.内存数据库数据是完全保存在内存中的,一旦掉电,内存内数据将完全丢失,但是大部分内存数据库会定期将数据写入磁盘,对容灾有挂念,但是在发生掉电时将来得及刷入磁盘的数据将会丢失。内存数据库的优势在于高性能,全部的操作都是在内存中进行的,从而降低了 IO 操作, 主要应用于一些对实时性要求很高的应用中。本着“操作越少,速度越快”的原则,有人推举直接使用内存集合而不使用内存数据库。假如想提高速度,可以用 Dictionary 泛型类,假如想查询机敏,可以用 Data

7、Table 类,其实假如多机应用的话,还不如直接用 sql server,用内存数据更麻烦也不会提高速度。出处:/topics/390496963但是内存数据的长久化将是一个问题内存数据库是怎么保证数据长久性的?为避开链接失效,就先将主要内容转载过来了。作者:黄快活链接: HYPERLINK /question/42241293/answer/155527974 /question/42241293/answer/155527974 来源:知乎著作权归作者全部。商业转载请联系作者获得授权,非商业转载请注明出处。所谓内存数据库,就是数据库放在内存中,磁盘作为 log 或者 checkpoint

8、备份。内存特性就是一旦掉电,全部数据就一夜回到解放前,所以数据长久化格外之重要。简洁来说它保证了一个 DBMS 的可用性,更远一点说,谁选的长久化策略好,谁的性能就高,(可能同时) 丢失的数据也少,谁就是内存数据库领域的霸主。所以现在都在提倡设计高性能内存数据库嘛常用的备份策略上一位答主介绍地差不多了,我再略微啰嗦几句。所谓快照 snapshot,其实又可以叫 checkpoint,意思是周期性地将内存数据中的数据同步到磁盘中,这个同步就比较讲究了:每一次同步是同步整个数据库还是只同步转变了的数 据?假如增量同步,怎么选出哪些是转变了的数据页?同步的时候数据库事务处理要不要中断?不中断怎么保证

9、异步检查点执行的正确性?这些问题都可以作为科研选题点。另一种备份策略叫 log(日志)。数据库领域最耳熟能详的 log 是什么?Write-ahead log,这是什么意思呢?即是说,每一次对内存数据库中的数据做操作之前,我都生成一个log,这个 log 里记录了我对数据的修改操作(log 序号,页号/地址/键值/,旧值,新值),然后在整个修改数据的 transaction 提交之前保证将该 log 刷出到磁盘中,然后再刷出 commit 标志。这样一来,假如内存数据库中的事务 commit 失败?就可以通过 log 回滚的旧值恢复内存数据库中的上一个全都状态。假如 commit 成功刷出,恢

10、复数据库就使用新值。当然,log 也有很多的讲究?比如 redo log, undo log,write-ahead log, write- behind log 选哪个在当前环境下最优?log 记录物理值还是记录规律值(规律值记录开销远小于物理值的记录)?系统恢复的时候怎么操作 log 最优?要不要搞分布式数据库的 log? 分布式环境下要不要动态做 log(一会儿记录物理值一会儿记录规律值 ooooo)?这些也都是很好的选题点。一般内存数据库为了低延迟和高吞吐量,会接受延迟回写长久化存储或者把日志临时先写到本地一个高速的长久化的存储(比如本地 3D XPoint)上之后再回写到长久化存储上

11、。所以一般这类系统在某种程度上对容灾会有肯定妥协,比如硬件损坏而非掉电更简洁造成数据丢失的问题。由于内存是比较昂贵的资源,延迟的长久化存储可以写入分布式文件系统做多个副本,所以内存数据库一般不会做冗余而是在灾难发生后在其他节点通过分布式文件系统快速恢复。相比较之下传统数据库会等待数据写入磁盘,甚至于校验后再返回认定写入成功。另外内存数据库每个节点的存储上限会受到内存大小限制。换页操作不会在这类系统上发生。由于数据全部要在内存中,内存数据库会着重考虑内存布局,压缩总占用甚至于偷 bit 存储一些标记位。一般也不会对内存进行对齐,并且对删除的数据也会设计专用的算法进行垃圾回收。以上是我在读 RAM

12、Cloud 论文总结出来的一部分特点,其他我还观看到的是内存数据库倾向于使用 O(1) 的数据结构,比如哈希表而不是树形。这样可以在计算上进一步降低计算造成的延迟。作者:Shisoft链接: HYPERLINK /question/42241293/answer/405378059 /question/42241293/answer/405378059 来源:知乎著作权归作者全部。商业转载请联系作者获得授权,非商业转载请注明出处。几款主流 NoSql 数据库的对比特殊说明SqliteSqlite 官方文档中有这样一句:An SQLite database is normally stored

13、in a single ordinary disk file. However, in certain circumstances, the database might be stored in memory.SQLite 一般是以文件的形式存储数据,也可以将数据存储在内存中。SQLite 是关系型数据库。RedisRedis 是 这 样 介 绍 的 :Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It

14、supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high av

15、ailability via Redis Sentinel and automatic partitioning with Redis Cluster.Redis 的数据是保存在内存中的MySQLMySQL has several “Engines”. In all engines, actions are performed in RAM. The Engines differ significantly in how good they are at making sure the data “persists” on disk.ENGINE=MEMORY This is not persistent; the data is found only in RAM. It is limited to some preset max size. On a power failure, all data (in a MEMORY table) is lost.ENGINE=MyISAM This is an old engine; it persists data to

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论