是时候跟 MongoDB 说再见了

在过去的两到三年的时间内,我一直在一个中等规模的项目中使用 MongoDB。

但因为各种技术上的原因,到了和 MongoDB 说再见的时候了,我的原因有以下几点:

  • MongoDB 当前的内存模型基于内存映射文件,这是一项已经宣布脑死亡的技术。在实际应用过程中,不具备伸缩性,没有方法来控制内存的使用情况。
  • 锁机制: 一个可伸缩性的数据库解决方案使用全局的服务器锁是一个糟糕的设计,特别是因为当 MongoDB 支持原子操作。应该有更精细的锁操作。
  • 查询引擎:目前 MongoDB 的每个查询只允许使用一个索引,不知道为什么会有这样的限制,完全没有理由。其实 MongoDB 的索引模型和关系数据库是差不多的。
  • 查询语言:使用 JSON 作为查询语言是一个糟糕的决定,尽管当前 JSON 查询语言支持标准查询,但对一些操作确实有限制,无法在 JSON 中执行一些类似 SQL 的复杂查询。
  • Map-Reduce: MongoDB 的 Map-reduce 相似一个无用的赠送品。
  • 数据分片:这是 MongoDB 的另外一个糟糕的功能,从一个单一的服务器到分区设置的步骤是非常巨大的,你需要最少两个复制集才能做分片,三个配置服务器和负载均衡,有点像小镇上的小房子旁建了一栋摩天大厦。
  • 数据中心的意识:这是另外一个拼凑在一起的特性,复制集只支持一个主节点和多个从节点,只能去写一个从节点。可以在跨多个数据中心运行复制集,但写操作只能在一个数据中心的从节点。
  • 默认关闭“安全”模式: 是谁做出这样白痴的决定呢?看到很到报道称数据丢失,多数是因为这个问题。
  • 日志: MongoDB 预先分配了 3G 的数据用于日志记录,这个数据是独立于数据库大小的,3G大小对一些小型系统来说简直是疯了。

社会化组件:10gen 和 MongoDB 试图让构建一个大型的可伸缩系统变得很简单,但实际上并不如此。在过去,构建大型的可伸缩性系统是非常复杂的,需要专业的知识和经验。尽管很多人觉得构建这样一个系统很酷。有一点很清楚的是,如果你正在构建一个小型或者中型的系统,那么使用 MongoDB 将会是徒劳的,因为性能不佳的问题以及收效甚微。很多人不愿意深入去了解和挖掘 SQL 数据库本身的功能和性能,轻易的作出了使用一些非 SQL 数据库系统的决定,这样的做法是不明智的,而且充满危险。我这样说可能太苛刻,不符合多样性,但却非常现实。

MongoDB 目前更多的是市场营销和炒作,10gen 主要的目标是为了告诉全世界说 MongoDB 是如何的酷,原因很清楚:10gen 正试图发挥在数据库这一市场上与其他产品进行竞争,以便能更好的说服投资人支付更多的钱来帮助其发展,这当然是 10gen 合法的目标,但其技术的基础却是摇摇欲坠的。

英文原文OSCHINA原创翻译

PulseAudio Android 移植初步实现

还记得本站之前报道过的 PulseAudio 和 Android AudioFlinger 之间的对比么?现在 Collabora 已经初步实现了 PulseAudio Android 版本的基本功能,甚至包括远程回放

通过一个 Wrapper 将对于 Android 原生的 AudioTrack 的请求翻译为 libpulse 客户端 API 的格式,PulseAudio 毫无意外的完成了音频回放的任务。

除了之前比对文章中指出的系统占有率和音质方面的优势,使用 PulseAudio 带来的一个额外好处就是系统级别的网络音频传输。而这一部分也已经实现了!

PulseAudio Android 版本远程音频回放演示(朝内镜像)

作者 Arun Raghavan 表示下一步的工作是开始迁移 AudioFlinger 的策略配置文件到 PulseAudio 策略配置格式,从而实现按需设备选择和统一化音量调整等功能。

当然,这一切都无需应用程序本身做任何变更,无需修改一行代码就可以实现类似 DLNA 的远程音频回放功能。

博客原文

消息来源:Phoronix

6月6日,IPv6将正式启动,从此改变世界

这次是来真的:IPv6 正式启动

从 2012年6月6日开始,世界将会变的不同。全世界范围内的 IPv6 将正式启动。通过内容提供商,网络服务提供商以及设备制造商的功能努力,我们将在互联网上看到一些真实的 IPv6 流量。不只是那一天,这个改变是永久性的。

这个转变必须是整个产业的合作才能完成。假如没有 IPv6 的网络,内容提供商不会提供 IPv6 的访问,假如没有 IPv6 的内容,网络接入商不会提供 IPv6 的访问,这是一个典型的鸡生蛋问题。

值得庆幸的是,整个产业达成了一个共识,在 2012年6月6日,参与这个活动的网络接入商将开放 IPv6 作为日常接入服务的一部分。同时,参与这个活动的内容提供商将提供 IPv6 的访问。

 

原文链接,OSChina.NET 编译

中国官方通过 Google 收购摩托罗拉移动,并要求 Android 至少继续开源五年

自Google宣布以125亿美元收购摩托罗拉移动已经过去了9个月,现在他们的收购之路基本已经明朗了。根据AP的报道,中国大陆官方最终也通过了这次收购案。在此之前Google也通过了欧盟和美国司法部的审查。

任何在中国年收入超过四亿人民币且在全球超过100亿人民币年收入公司的收购案,都要通过中国大陆官方的反垄断审核。Google和摩托罗拉本来预计在2012年初就可以通过审核,现在他们已经万事俱备,将在未来数周内完成最终的交易。

另外来自华尔街日报的报道,Google通过中国大陆的收购审核有一个前提,就是同意继续让Android至少再开源5年,未来5年里Google将继续允许任何人下载Android的源代码并进行肆意的修改,这一政策在未来5年里不会有变。

很奇怪为何中国大陆政府部门会提出让Google做出这个承诺,可能是为了保证Google不会对自家的摩托罗拉移动部门做出任何偏袒,要对所有 OEM厂商一视同仁,一碗水端平(并继续方便国内各大山寨厂商和互联网公司继续在挖空Google字样的情况下使用Android?)。

Via TC and 9to5google

为什么 .NET 会被叫做 .NET?

微软开发.NET Framework是在20世纪90年代后期,最初是叫做“下一代Windows服务”(Next Generation Windows Services 简称 NGWS)。 那么为什么微软会选择.NET这个名字呢? 这确实是有点神秘,但下面的答案是我到目前为止认为最好的解释:

1).NET是由微软营销人员提出的,认为它代表着“网络”技术,同时Sun公司的营销人员也提出了他们的主题:“ 网络就是计算机“。当时“Dot COM”成为了互联网的代名词,而“Dot Net”则是对这个词的扩展。

我不认为这是一个坏的名字,但问题是,微软最初为那么多的产品命名“.NET”,甚至把与互联网无关的产品也命名“.NET”,像“.NET My Services”和“.NET Enterprise Servers”。这也引起了一些大的混乱。后来由微软纠正,并限制命名.NET为管理软件框架的技术。- 斯坦利小

2)当时我在微软做开发,我也不知道是谁命名的.NET。跟我交流过的人都认为它是一个糟糕的名字。不过它的发音不像NGWS。- 乔治v.赖利

3)早期的市场营销推.NET为Web服务。当时.NET被期望是更容易编写和使用的Web服务。特别是,它应该更容易调用Web服务,这样微软就会让每个人都将使用:“.NET My Services”。

当然,该项目很快就土崩瓦解,但是这个名字仍然存在。它至少是比“COM + +”或“ActiveXX”要好。- 约翰·桑德斯

4)我是2001年暑期在微软实习的,暑期结束和当时的实习生一起去比尔·盖茨的房子附近烧烤。一个实习生问比尔:“在你想出.NET之前,还有其他什么的名字吗?”

在我的记忆中,比尔是这样回答的:”事实上我不喜欢.NET这个名字。它让人们怀疑我们是否终于开始了解互联网。可悲的是,其他提议的名字更糟。我们当时的宗旨是‘任何地方,任何时候,任何设备上工作’,所以建议是AAAWare。“- 乐琳

直到前两天,在StackOverflow上一个关于”为什么.NET会被叫做.NET?“这一问答贴,仍然排在谷歌搜索结果的顶部。

这个问题贴被StackOverflow认为是关闭贴,即使它是可见的,封闭约三年左右。就在它将要被删除前,我编辑了一个公认的答案,就是由 斯坦利小 做出的回答。然后简要地编辑后,被版主把整个问题删除了。因此,我认为这是有必要拿来写成简短的博客文章的,以防止其他人想要找到答案却没有,就像我一样;-)。

原文链接OSChina.NET翻译