只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操作系统和计算机网络,就能当一个不错的程序员。如果能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了,我们这里主要聊聊数据库的重要性!
在最宽泛的意义上,有状态的地方就有数据库。它无所不在,网站的背后、应用的内部,单机软件,区块链里,甚至在离数据库最远的Web浏览器中,也逐渐出现了其雏形:各类状态管理框架与本地存储。“数据库”可以简单地只是内存中的哈希表/磁盘上的日志,也可以复杂到由多种数据系统集成而来。关系型数据库只是数据系统的冰山一角(或者说冰山之巅),实际上存在着各种各样的数据系统组件:
数据库:存储数据,以便自己或其他应用程序之后能再次找到(PostgreSQL,MySQL,Oracle)
缓存:记住开销昂贵操作的结果,加快读取速度(Redis,Memcached)
搜索索引:允许用户按关键字搜索数据,或以各种方式对数据进行过滤(ElasticSearch)
流处理:向其他进程发送消息,进行异步处理(Kafka,Flink,Storm)
批处理:定期处理累积的大批量数据(Hadoop)
下面我就着重介绍下7个绝妙的免费数据库软件和开源的DBM解决方案,帮助你更好的了解数据库!
CUBRID
CUBRID 是一个很好的免费开源选择,专门针对 Web 应用程序进行优化,当复杂的 Web 服务需要处理大量数据并生成巨大的并发请求时,CUBRID 非常有用。该解决方案是用 C 写的。
优点:
多粒度锁定
在线备份
用于开发语言的 GUI 工具和驱动程序:
JDBC, PHP, Python, Perl, 和 Ruby.
自动故障切换功能,全天候在线网络服务
支持本机 DB 分片,实现水平/垂直可扩展性
大型系统通过多个数据库实例划分数据
数据库复制和事务一致性
缺点:
不适用于苹果系统
没有脚本调试器
手册仅限英文或韩文
他们论坛上的讨论往往是过时的(大部分来自几年前)
Firebird
该关系型数据库自1981年以来一直(以各种名称)用于生产系统,并具有许多ANSI SQL标准功能。 Firebird能够在Linux,Windows和各种Unix平台上运行。
优点:
Trace API 用于实时监控
Windows 信任的身份验证
四个支持的架构:
SuperClassic, Classic, SuperServer, 和 Embedded
多种开发工具:
商业工具:FIBPlus 和 IBObjects
自动扫描选项用于清理数据库
数据库触发器和存储过程的事件通知
Firebird 的大型全球社区提供免费支持
缺点:
不包括集成复制支持(仅作为附件)
缺少临时表格和与其他数据库系统的集成
与其他操作系统解决方案相比,缺乏 Windows 信任认证
MariaDB
MariaDB 由 MySQL 的原创人员开发,并被维基百科,Facebook 甚至 Google 等技术巨头使用。 MariaDB 是一种可为 MySQL 提供插件替换功能的数据库服务器。开发人员的首要关注点是安全性,在每个版本发布时,开发人员还会合并所有 MySQL 的安全修补程序,并在需要时对其进行增强。
优点:
高可扩展性,易于集成
能够实时访问
具备 MySQL 的核心功能(MariaDB 是 MySQL 的替代方案)
备用存储引擎,服务器优化和补丁
MariaDB 已经运作了20多年的广泛知识库
缺点:
缺少密码复杂性插件
没有 memcached 界面
没有优化器跟踪
MongoDB
MongoDB 创立于2007年,被称为“数据库巨头”。 由 DoubleClick, ShopWiki 和 Gilt Groupe 背后的开发人员开发,并由 Fidelity Investments, Goldman Sachs Group,Inc.,Intel Capital 这些机构投资。自成立以来,MongoDB 已经被下载了 2 亿次,并且有超过 1000 个合作伙伴支持。这些合作伙伴致力于这个免费的开源解决方案,他们相信编码与数据库应该是简单而自然的。
优点:
文件验证
加密存储引擎
常用用例:
移动应用
产品目录
内容管理
具有内存存储引擎(beta)的实时应用程序
减少主要故障恢复的时间
缺点:
不适合需要处理复杂事务的应用程序
不是传统应用程序的替代品
年轻的解决方案:软件更新快
MySQL
MySQL 诞生于 1995 年前后,现在归 Oracle 拥有。它是开源的,但也有几个付费版本提供其他功能,如异地备份和自动缩放。因为MySQL是一个行业标准,所以它兼容每个操作系统,并由 C 和 C++ 编写。该解决方案对于国际用户来说是一个很好的选择,因为服务器可以用多种语言向客户端发送错误消息,而且支持多种不同的字符集。
优点:
基于主机的验证
即使没有网络也可用
灵活的权限和密码系统
所有密码的安全加密
可以嵌入到独立应用程序中的库
提供服务器作为客户端/服务器联网环境的独立程序
缺点:
被 Oracle 收购:
用户觉得 MySQL 不再属于免费和开源
不再是社区驱动
会员无法修复 bug 和补丁
由于更新缓慢而落后于其他数据库
PostgreSQL
PostgreSQL 拥有超过 15 年的积累,是另一个明星级开源选择,运行于所有主要的操作系统,包括Linux,UNIX(AIX,BSD,HP-UX,SGI IRIX,Mac OS X,Solaris,Tru64)和 Windows。 PostgreSQL 还完全符合 ACID 要素(原子性,一致性,隔离性,持久性)。
优点:
创建自定义数据类型和查询方法
框架允许定义和创建自定义数据类型
以十几种编程语言运行存储过程:
Java,Perl,Python,Ruby,Tcl,C / C ++及其自己的PL / pgSQL
GiST(广义搜索树)系统
B 树,B+树,R 树,部分和树,以及排名的 B+ 树
提供不同的排序和搜索算法:
创建扩展如 CitusDB 更多的并行性,而不修改 Postgres 代码
缺点:
MVCC系统需要定期的“清理(vacuuming)”
高交易率环境中的问题
由强大的社区发展起来的
改进需要更大的努力
SQLite
SQLite 自称是世界上部署最广泛的数据库,2000年开始使用,已被诸如苹果,Facebook,微软和谷歌等知名公司使用。 每个版本均经过仔细测试来以确保可靠性。即使有错误,SQLite 的开发人员也会通过诚实地提供每个版本的错误列表和代码更改时间来告知其潜在的缺点。
优点:
没有单独的服务器进程
文件格式是跨平台的
紧凑型库:运行速度比更大内存的还要快
符合 ACID 原则
还可提供专业支持
缺点:
不推荐用于:
客户端/服务器应用程序
大容量网站
大数据集
高并发性
总结:
选择适合的数据库之前,你需要问自己一些问题:
你是否分别基于这些数据库对你的产品性能做过测试?哪一个表现更好,为什么?
你是否打算使用其中一个数据库专门提供的功能?
你是否打算使用其中一个数据库专门提供的数据库引擎?
你的操作系统是否默认支持你所选的数据库?要部署它需不需要很多工作量?
你是否计划将来从一种数据库类型迁移到另一种数据库类型?如果是这样,你是否考虑过兼容性和复制方面的问题?
如果你能回答好这些问题,可能就很清楚哪个数据库更适合你。
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。