NoSQL 没毛病,为什么 MySQL 还是“王”?
NoSQL 出现时,许多人认为关系型数据库已进入死亡倒计时,MySQL 将退出舞台。
然而,在目前的各种数据库榜单中,MySQL 依然保持着领先地位。更令人惊讶的是,虽然甲骨文的受欢迎程度在不断下降,但 MySQL 保持着稳定。 为什么?
据 DB-Engines 统计,虽然 MySQL 和 Oracle 相对于其它数据库来看已有“失宠”迹象,但成绩仍然不错。而且 MySQL 的走势表现不错:
虽然这几年 MySQL 在 Google 的搜索有所下降,但大体上与 Oracle 和 Microsoft SQL Server 的搜索下降幅度一致,专业兴趣(参考 Stack Overflow 趋势)保持相对稳定。与其他数据库相比:
剧本似乎和最初设想的不同。NoSQL 在企业中蓬勃发展,是因为企业都在努力管理其现代数据的数量、速度和多样性。不知何故,MySQL 不仅幸存下来,而且发展不错。
当然,NoSQL 也展示了其潜力。MongoDB 尤其引起了极大的兴趣,该公司今年以来的收入已超过1亿美元。
不过 MongoDB 并没有推翻 MySQL,也没有挤垮 Apache Cassandra 或 Apache Hadoop,它们各自有拿得出手的专属使用案例。部分原因源于当今大多数大数据的性质:本质上仍然是事务性的。
这恰恰也是 MySQL 受欢迎的核心:它是最适合广泛数据库从业人员技能的数据库。他们甚至可以利用从 Oracle、IBM DB2 和 Microsoft SQL Server 学习到的东西,将其应用到这个无处不在、免费和开源的数据库。
Pivotal 的副总裁 James Bayer 曾表示,MySQL 对于苛刻的工作负载来说是一个强大的选择。Compose.io 的开发者 DJ Walker-Morgan 也说过:“NoSQL 就像我购买营养食品去减肥一样,负责的是控制,必须有严格的纪律和谨慎的管理才适用”。
说白了,MySQL 没有 Oracle 喜欢在其数据库上贴的“企业级”标签,没有 NoSQL 所谓的“横向扩展”营销方式,但它是以前也是现在的开发者的默认选择。(编译自:infoworld)
Linux kernel 的设计是否已经过时?
Linux 多年来取得的成绩毋庸多言。但最近,redditor 上有人发起了一个话题,想知道 Linux 的内核设计是否已经过时,并得到了一些有趣的答案。
这位 Ronis_BR 的用户提问大致如下:
Linux 是在 1992 年启动的,一些特性到现在都没有改变。我猜想最新的操作系统内核设计技术(如果存在...)应该较之前有很大的进步。那 Linux 内核是否已经过时?
与 Windows、macOS,FreeBSD 内核的设计相比,Linux 内核的设计有没有在哪些方面比较先进?(注意,重点是设计的先进,而不是哪一个更好)。
该话题引起了近400条回复,大家纷纷发表了自己对内核设计的看法,节选几条不同的观点:
ExoticMandibles:“过时”?不存在的。Linux kernel 对现代内核的设计其实是非常了解的,只是它选择了保持传统的形式。
内核设计的核心在于“安全/稳定”和“性能”之间的关系。Microkernels(微内核)以性能为代价保证安全。如果你有极小的微内核,那么它将具有相对较小的 API surface,使其难以被攻击。而且当你有一个错误的文件时,驱动程序崩溃而不占用内核,可以无损重启。优越的稳定性!优越的安全性!一切很美好。
但这种方案的缺点是所有 IPC 永远且不可避免的开销。如果你的程序想从文件加载数据,则必须访问文件系统驱动,这意味着 IPC 要处理进程上下文切换和两次 ring transitions 。然后,文件系统驱动要求内核与硬件通信,这也意味着两次 ring transitions。然后文件系统驱动发送其回复,这意味着又一轮的两次,以及另一次上下文切换。总开销:两次上下文切换,两次 IPC 调用和六次 ring transitions。非常贵!
宏内核将所有设备驱动合拢到内核中。所以当出现一个错误的图形驱动,就可以占用内核,或者如果它有一个安全漏洞,那么可能被用来危及系统。但是,如果你的程序需要从磁盘加载某些东西,则会调用内核,进行 ring transitions,与硬件通话,计算结果,并返回结果,进行另一个 ring transitions。总开销:两次 ring transitions。便宜得多,也快得多!
简而言之,微内核是:“放弃性能来提高安全性和稳定性”;宏内核是:“保持性能,只要修复安全和稳定性问题就可以了”。而目前,大家更愿意接受后者。
Scandalousmambo: 开发一个和 Linux kernel 相同的系统,从本质上决定了它一旦设计出来就会“过时”。
KugelKurt:尽管这里讨论的大部分内容都是关于微内核与宏内核的关系,但是最近的研究还涉及到编程语言。如果你今天启动一个全新的内核,那么就可能不会用 C 去写。微软的 Singularity 和 Midori 项目探讨了用 C#托管代码内核的可行性。
Daemonpenguin:有一些概念,在理论上可以提供更好的内核设计。比如,理论上微内核也有一些非常好的设计选择,使得它们具有便携性、可靠性和潜在的自我修正能力。
然而,无论理论多么好,人们总是会根据实际情况进行设计。Linux 内核拥有如此多的硬件支持,那么多公司支持开发,其他内核(不管设计得多炫酷)都不太可能赶得上。
例如,MINIX 具有良好的设计和一些很棒的功能,但硬件支持很少,几乎没有人为此平台开发。
……
欢迎大家就此事在下方回复自己的看法。