因为传统的SQL数据库没想到要分片存储,而现在的NewSQL开始考虑到这些问题了。当然分片存储也会遇到新的问题,不像NoSQL(除了图数据),NewSQL需要考虑如何避免SQL join的跨节点通讯。
一、为什么关系型数据库系统不易于scaling out(横向扩展)
因为传统的SQL数据库没想到要分片存储,而现在的NewSQL开始考虑到这些问题了。当然分片存储也会遇到新的问题,不像NoSQL(除了图数据),NewSQL需要考虑如何避免SQL join的跨节点通讯。
TP – 实现serializability通常需要linearizability, 后者在分布式环境下等价于共识问题,所以很难扩展。
AP – 查询执行的parallel processes模式其容错和性能稳定性差,分布式环境难以扩展。
TP的难以扩展触及分布式系统本质问题,不好解决。
AP的话通过借鉴big data系统,采用stateless tasks执行方式是可以解决的。
延伸阅读:
二、为什么要持久化连接
这和 web 服务器的工作方式有关。web 服务器可以通过三种方法来利用 PHP 生成 web 页面。
名列前茅种方法是将 PHP 自以为 CGI“包装器”用作一个单独运行的语言解释器(CGI Wapper)。当以这种方法运行时,PHP 会为向 web 服务器的每个 PHP 页面请求创建并销毁 PHP 解释器的时候实例。由于其会随每个请求的结束而销毁,因此其获取的任何资源(例如指向 SQL 数据库服务器的链接)都会在销毁时关闭。在这种情况下,不会从使用持久连接中获得任何好处——因为根本不会持久。
第二,也是最流行的方法是把 PHP 用作多进程 web 服务器的一个模块,这种方法目前只适用于 Apache。多进程的服务器通常有一个父进程和一组子进程协调运行,子进程负责提供网页的工作。每当接收达到客户端提出请求时,该请求会传递给尚未给其它客户端提供服务的某个子进程。这也就是说当相同的客户端第二次向服务端发出请求时,它将有可能由与名列前茅次不同的某个子进程提供服务。在开启了一个持久连接后,所有请求 SQL 服务的后继页面都能够重用与 SQL 服务器建立的相同连接。
最后一种方法是将 PHP 用作多线程 web 服务器的插件。目前 PHP 支持 WSAPI 和 NSAPI(在 Windows 上),允许 PHP 作为 Netscape FastTrack(iPlanet)、Microsoft 的 Internet Information Server (IIS) 和 O’Reilly 的 WebSite Pro 等多线程服务器的插件使用。该行为与前面描述的多过程模型相同。