热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

反NoSQL的呼声(转)

CAP的崩溃 CAP猜想可是NoSQL的基石。上图非常有意思,他从CAP,和数据库种类两个方向对NoSQL进行了分类。Consistent,Available(CA)Systems

CAP的崩溃

反NoSQL的呼声(转)

 

CAP猜想 可是NoSQL的基石。上图非常有意思,他从CAP,和数据库种类两个方向对NoSQL进行了分类。

Consistent, Available (CA) Systems 。在分布式方面有些问题,通常是通过复制来解决的。包括

  • Traditional RDBMSs like Postgres, MySQL, etc (relational)
  • Vertica (column-oriented)
  • Aster Data (relational)
  • Greenplum (relational)

Consistent, Partition-Tolerant (CP) Systems 。可用性上有问题但是在各节点数据保存一直。包括:

  • BigTable (column-oriented/tabular)
  • Hypertable (column-oriented/tabular)
  • HBase (column-oriented/tabular)
  • MongoDB (document-oriented)
  • Terrastore (document-oriented)
  • Redis (key-value)
  • Scalaris (key-value)
  • MemcacheDB (key-value)
  • Berkeley DB (key-value)

Available, Partition-Tolerant (AP) Systems 能够使用“最终一致性”保证一直。包括

  • Dynamo (key-value)
  • Voldemort (key-value)
  • Tokyo Cabinet (key-value)
  • KAI (key-value)
  • Cassandra (column-oriented/tabular)
  • CouchDB (document-oriented)
  • SimpleDB (document-oriented)
  • Riak (document-oriented)

射人先射马,擒贼先擒王。虽然CAP只是个经验性总结,但是反NoSQL的簇拥们免不了要对CAP先下毒手。

CAP的证明 。大体逻辑是如果要分布式,那么更新数据的时候,要么加锁(或其他技术)保证一致,要么不加锁保证可用;如果两个都想保证,就不能分布式了。可以看得出,这个证明很粗略,没有什么数学公式啥的。自然会被人钻牛角尖。

有人说,为什么一定要加锁才能保证一致?因为数据总是以串行的进入的,所以是一致的。如果保持数据不串行进入而且同时保证一致性呢?

数据的更新不是新数据替换掉旧数 据,就算是顺序发生错误,也是一致的。在实现上可以说是数据库有一个Agent可以以一种积极的态度来防止出现非一致更新。这种系统有如下特点:

  • 支持事务,每个事物都是原子操作
  • 在事务提交阶段可以发现不一致现象,并加以制止
  • 事务提交算法支持分布式

我觉得也可以是一种新型的数据结构实现。

所以CAP应该称为SAP

上面这段文字是从理论层面的反驳,尽管看起来头头是道。。。。说不定是个好想法,可以试一试。比如将数据库日志化,或者根据数据修改操作的唯一ID,来识别先后。再仔细想想,说不定挺有意思的。

RDBMS不具备可扩展性的谎言

刚刚的言论是对NoSQL的攻击,这里则是自保了。

可扩展性是什么?可扩展性是不是要扩展到九重天上太上老君的兜率宫?适合的才是最好的,NoSQL的适用情况并不是太多。

你不需要为了NoSQL花费100万美元。一个中级的Dell服务器就可以满足这个世界上绝大部分的应用了。只要你的应用不是Twitter和 Facebook.你可以将这些4核的服务器连起来,形成一个24核的,128GB内存的运算能力,只有$15,000。这已经强大到应付绝大部分应用 了。

那些NoSQL簇拥诽谤着RDBMS不具备的扩展性,其实是徒劳的。RDBMS的扩展性实用的,不是无限的。

感觉商业机密比计算能力值钱。风云莫测啊。

引用:

Getting_Real_about_NoSQL_and_the_SQL_Isnt_Scalable_Lie
Brewer’s CAP Conjecture is False
visual-guide-to-nosql-systems

 

 

http://www.yankay.com/nosql%E7%9A%84%E7%9C%9F%E7%9B%B8%E5%92%8C%E8%B0%8E%E8%A8%80/

 

 

 

 

 


推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 在Django中提交表单时遇到值错误问题如何解决?
    在Django项目中,当用户提交包含多个选择目标的表单时,可能会遇到值错误问题。本文将探讨如何通过优化表单处理逻辑和验证机制来有效解决这一问题,确保表单数据的准确性和完整性。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • Mongoose E11000 错误:集合中出现重复键问题分析与解决 ... [详细]
author-avatar
让安丷全筑起心灵的屏障
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有