0

0

NoSQL运动:数据库架构抉择_MySQL

php中文网

php中文网

发布时间:2016-06-01 13:49:36

|

1175人浏览过

|

来源于php中文网

原创

bitsCN.com

  导读:mike loukides是o'reilly传媒的内容战略副总裁,他对编程语言和unix系统管理非常感兴趣,著作有system performance tuning和unix power tools。本文中,mike loukides提出了自己对nosql的精辟见解,并对现代数据库架构的方方面面进行了深入思考。

  在去年的一次谈话中,basho公司的CTO Justin Sheehy认为,NoSQL是一场运动,而非技术。我立刻深表赞同,因为以往关于NoSQL的探讨并不舒心。

  那么,为什么说NoSQL是一场运动,而非技术呢?Justin的说法直截了当:之所以说NoSQL是一场运动,是因为这是对数据库架构的选择。任何一种单一的技术主题,反而会掩盖NoSQL运动的实质。

  

/

 

  自八十年代以来,关系型数据库(如SQL Server、Oracle和DB2)一直都是后端业务系统的主导。这些关系型数据库产品都非常优秀,它们之间有许多共通之处。

通用产品企业网站(.NET2.0)1.0
通用产品企业网站(.NET2.0)1.0

1、系统采用.net2.0开发,数据库access2、三层架构,数据层、逻辑层和表示层分离3、系统完全使用div+css布局,可以灵活处理界面4、技术特点: 使用模板页,大大减少代码量 动态生成竖向导航菜单 ul li实现表格 各种自定义用户空间 Reapter等数据控件的灵活运用

下载

  回顾一下以往15年的软件开发历程,我们已经构建了许多优秀的大型数据库应用,其中不乏Web应用。但是自关系型数据库诞生以来,数据库领域已经产生了许多变化:

  •   数据激增。虽然存储的容量和CPU的速度都在飞速发展,使得数据库可以应对数据量的激增,但是数据量的确是一个棘手的问题,对于任何重要的数据库而言,分布式必不可少。
  •   亚秒级的查询响应。在八十年代,数据库查询以批处理的方式运行,查询效率低下。现在的互联网,已经从静态文件发展到由复杂数据库支撑的站点,而且对于大多数查询,我们需要亚秒级的响应时间。
  •   7*24小时正常运行。为静态HTML文件设置冗余服务器非常容易,但复杂的数据库复制就另当别论了。
  •   对高速数据流的捕捉越来越重要。许多应用的后台数据库吸纳数据的速度远远快于处理数据查询的速度。比如,在日志应用或者分布式传感应用数据库中,写入比查询频繁的多。ETL(数据提取、转换和加载)固然不可或缺,但对高速数据流的捕捉显得越来越重要。
  •   非结构化数据。非结构化数据早就存在,并不是数据世界里的新景观,但我们越来越不希望强制数据结构。
  •   牺牲ACID。ACID(原子性、一致性、隔离性、持久性)虽然很重要,但现代应用带来的挑战让我们意识到,为了实现其它特性(如低延迟和可用性),我们必须做出牺牲。

  需求的不断变化,迫使我们不得不思考全新的数据库解决方案:

  •   分布式。庞大的数据库只是采用分布式的一个原因,另一个原因是现代应用(尤其是Web应用)要求满足许多在线用户的瞬时响应。响应时间每超时一秒,都会造成大量用户流失。
  •   实时计算。如果你正通过构建在线应用支持业务分析,那么用户必然期望实时业务分析。这不仅便捷,每天执行成百上千的查询,彻底改观了我们的工作。
  •   可扩展性。如果你正在构建一个面向客户的应用,进行业务分析,那么可扩展性是一个大问题。垂直可扩展性已经近乎极限,物理定律的制约使得Intel架构的时钟频率在3.5GHz的范围内徘徊不前,水平可扩展性(构建多节点分布式系统)成了唯一的途径。
  •   高可用性。应用系统架构中的任何一部分出现单点故障,都会导致灾难性的后果,数据库系统必须提供高可用性支持。一个高可用性系统天然就是一个分布式系统。
  •   数据分片。对于一个给定的分布式数据库,接下来的问题就是数据分片。关系型数据库在多台主机之间采用手动分片,或者基于数据本身的某些属性对数据集进行分区。MongoDB非常容易进行数据分片,HBase、Riak和Cassandra本身就是分布式数据库。
  •   Schemaless(无模式)。NoSQL数据库通常称为schemaless(无模式),因为它们与关系型数据库的架构形态无关。事实上,NoSQL并非完全无模式。在像CouchDB或MongoDB这样的文档数据库中,文档是许多键值对(key-value)。Riak也可以被看做是一个文档数据库,但比文档类型更灵活。Cassandra和HBase被称为面向列的数据库。在大多数应用开发中,NoSQL数据库前期规划更少,灵活性更大,更适合敏捷开发。
  •   ACID和CAP。ACID属性深入人心,但如果我们仔细思考数据库的架构,就会发现对一个分布式系统实现一致性和隔离性等ACID属性非常困难。ACID属性非常重要,但自由的选择需要折中。CAP定律指出,对于一个分布式计算系统,一致性、可用性和分区容错性只能同时满足其中二者。
  •   脚本语言。所有的关系型数据库都有SQL语言变种(例如,T-SQL和PL/SQL)作为数据脚本语言。在非关系型数据库的世界里,也有一些脚本语言可用。CouchDB和Riak支持JavaScript脚本,MongoDB也是如此。Hadoop项目分裂出的几个脚本编程语言项目(包括Pig和Hive)适用于HBase。Redis项目正在试验集成Lua脚本语言。
  •   RESTful接口。只有CouchDB和Riak提供了RESTful接口。
  •   图形。Neo4J是一个为维护图形而专门设计的数据库。图形是非常灵活的数据结构,图数据库可以模拟其它任何类型的数据库。
  •   SQL。我们一直在探讨NoSQL运动,但也无法忽略SQL这门熟悉的编程语言。有人正在致力于将SQL移植到Hadoop之上,也许我们未来会采用混合的数据库架构。
  •   科学数据。SciDB是一个面向大型科研应用的数据库项目,其存储模型基于多维数组。SciDB的存储可以轻松扩展到数百PB,每晚收集数十TB的数据。
  •   混合架构。 NoSQL运动与数据库架构的选择息息相关。也许最后的数据库架构选择是混合架构,而不是某种单一的数据库技术。只有选择混合架构,才能博采众长,与技术的发展相适应。混合架构是在传统电子商务站点中融入社会化特性的最佳方式。

  写在最后

  NoSQL运动引发了我们的思考,究竟什么才是我们想要的数据库架构解决方案。也许我们最终会明白,没有放之四海而皆准的真理

bitsCN.com

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
微信文件过期恢复教程
微信文件过期恢复教程

本专题整合了微信文件过期恢复方法、技巧教程,阅读专题下面的文章了解更多详细内容。

0

2026.02.04

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

63

2026.02.04

学习通网页版入口与在线学习指南 学习通官网登录与使用方法
学习通网页版入口与在线学习指南 学习通官网登录与使用方法

本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。

9

2026.02.04

Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

9

2026.02.04

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

3

2026.02.04

Golang 容器化与 Docker 实战
Golang 容器化与 Docker 实战

本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。

3

2026.02.04

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

59

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

110

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

56

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.5万人学习

Django 教程
Django 教程

共28课时 | 3.9万人学习

Excel 教程
Excel 教程

共162课时 | 15.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号