数据库技术

2020-12-11

 

       数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。

        数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:

     (1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。

     (2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。

关系型数据库-PostgreSQL

       PostgreSQL是一个功能强大的开源对象关系数据库系统,它使用和扩展了SQL语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。

      1. PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。  
  2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。 
      3. PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发的。 
      4. PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。

 

 

键值数据库-Redis

       键值数据库(key-value store)是一张简单的哈希表(hash table),主要用在所有数据库访问均通过主键(primary key)来操作的情况下。应用程序可以提供键和值,并将这一键值对持久化。假如键已存在,就用新值覆盖当前值,否则就新建一条数据。键值数据库是最简单的NoSQL数据库。客户端可以根据键查询值,设置键所对应的值,或从数据库中删除键。“值”只是数据库存储的一块数据而已,它并不关心也无需知道其中的内容;应用程序负责理解所存数据的含义。由于键值数据库总是通过主键访问,所以它们一般性能较高,且易于扩展。

       Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集,位图,超级日志,带有半径查询和流的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。优点:对数据高并发读写;对海量数据的高效率存储和访问;对数据的可扩展性和高可用行。缺点:redis(ACID)处理非常简单;无法做到太复杂的关系数据库模型

        Redis 是以key-value store存储,data structure service 数据结构服务器,键可以包含: (string)字符串、哈希、链表(list)、(set)集合。(Zset)有序集合。这些数据结合都支持pysh/pop、add/remove及取交集和并集以及更丰富的操作,redis支持各种不同方式排序,为了保证效率,数据丢失缓存在内存中,它也可以周期性的把更新数据写入磁盘后者把修改操作写入追加到文件。

       Redis还提供了许多额外的功能:提供了键过期功能,可以用来实现缓存;提供了发布订阅功能,可以用来实现消息系统支持Lua脚本功能,可以利用Lua创造出新的redis命令;提供简单的事务功能,能再一定程度上办证事务特性;提供了流水线(pipeline)功能,这样客户端能将一批命令一次性传到redis,减少了网络的开销。