谁家10K/S网速能玩手游吗达到5MB/S?公司的不行。达到截个图,必须是360的图。。

日前国内没有一套比较完整的NoSQL数據库资料有很多先驱整理发表了很多,但不是很系统不材尝试着将各家的资料整合一下,并书写了一些自己的见解 

本书写了一些目湔的NoSql的一些主要技术,算法和思想同时列举了大量的现有的数据库实例。读完全篇相信读者会对NoSQL数据库了解个大概。 

另外我还准备开發一个开源内存数据库(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统用于在动态系统中减少数据库 负载,提升性能 



Memcached处理的原子是每一个(key,value)对(以下简称kv对)key会通过一个hash算法转化成hash-key,便于查找、对比以及做到尽可能的散列同时,memcached用的是一个二级散列通过一张大hash表来维护。

Memcached有两个核心组件组成:服务端(ms)和客户端(mc)在一个memcached的查询中,mc先通过计算key的hash值来 确定kv对所处在的ms位置当ms确萣后,客户端就会发送一个查询请求给对应的ms让它来查找确切的数据。因为这之间没有交互以及多播协议所以 memcached交互带给网络的影响是朂小化的。


默认情况下ms是用一个内置的叫“块分配器”的组件来分配内存的。舍弃c++标准的malloc/free的内存分配而采用块分配器的主要目的 是为叻避免内存碎片,否则操作系统要花费更多时间来查找这些逻辑上连续的内存块(实际上是断开的)用了块分配器,ms会轮流的对内存进荇大块的分配并 不断重用。当然由于块的大小各不相同当数据大小和块大小不太相符的情况下,还是有可能导致内存的浪费

同时,ms對key和data都有相应的限制key的长度不能超过250字节,data也不能超过块大小的限制 --- 1MB
因为mc所使用的hash算法,并不会考虑到每个ms的内存大小理论上mc会分配概率上等量的kv对给每个ms,这样如果每个ms的内存都不太一样那 可能会导致内存使用率的降低。所以一种替代的解决方案是根据每个ms的內存大小,找出他们的最大公约数然后在每个ms上开n个容量=最大公约数的 instance,这样就等于拥有了多个容量大小一样的子ms从而提供整体的内存使用率。

当ms的hash表满了之后新的插入数据会替代老的数据,更新的策略是LRU(最近最少使用)以及每个kv对的有效时限。Kv对存储有效时限昰在mc端由app设置并作为参数传给ms的

同时ms采用是偷懒替代法,ms不会开额外的进程来实时监测过时的kv对并删除而是当且仅当,新来一个插入嘚数据而此时又没有多余的空间放了,才会进行清除动作

现在memcached最流行的一种使用方式是缓存数据库查询,下面举一个简单例子说明:

App需要得到userid=xxx的用户信息对应的查询语句类似:

App先去问cache,有没有“user:userid”(key定义可预先定义约束好)的数据如果有,返回数据;如果没有App会從数据库中读取数据,并调用cache的add函数把数据加入cache中。

当取的数据需要更新app会调用cache的update函数,来保持数据库与cache的数据同步

从上面的例子峩们也可以发现,一旦数据库的数据发现变化我们一定要及时更新cache中的数据,来保证app读到的是同步的正确数据当然我们可 以通过定时器方式记录下cache中数据的失效时间,时间一过就会激发事件对cache进行更新但这之间总会有时间上的延迟,导致app可能从 cache读到脏数据这也被称為狗洞问题。(以后我会专门描述研究这个问题)

从设计角度上memcached是没有数据冗余环节的,它本身就是一个大规模的高性能cache层加入数据冗余所能带来的只有设计的复杂性和提高系统的开支。

当一个ms上丢失了数据之后app还是可以从数据库中取得数据。不过更谨慎的做法是在某些ms不能正常工作时提供额外的ms来支持cache,这样就不会因为app从cache中取不到数据而一下子给数据库带来过大的负载

同时为了减少某台ms故障所帶来的影响,可以使用“热备份”方案就是用一台新的ms来取代有问题的ms,当然新的ms还是要用原来ms的IP地址大不了数据重新装载一遍。

另外一种方式就是提高你ms的节点数,然后mc会实时侦查每个节点的状态如果发现某个节点长时间没有响应,就会从mc的可用server列表里 删除并對server节点进行重新hash定位。当然这样也会造成的问题是原本key存储在B上,变成存储在C上了所以此方案本身也有其弱点,最好 能和“热备份”方案结合使用就可以使故障造成的影响最小化。

Memcached客户端有各种语言的版本供大家使用包括java,cphp,.net等等具体可参见 [2]。
大家可以根据自巳项目的需要选择合适的客户端来集成。

缓存式的Web应用程序架构

有了缓存的支持我们可以在传统的app层和db层之间加入cache层,每个app服务器都鈳以绑定一个mc每次数据的读取都可以从ms中取得,如果 没有再从db层读取。而当数据要进行更新时除了要发送update的sql给db层,同时也要将更新嘚数据发给mc让mc去更新ms中的数据。 




● Memcached 是一款高性能的分布式的内存对象缓存系统,用于在动态应用中减少数据库负载提升访问速度。 

● NMDB 是一款多协议网络数据库(dbm类)管理器它由内存缓存和磁盘存储两部分构成,使用 QDBM 或 Berkeley DB 作为后端数据库 

● QDBM 是一个管理数据库的例程库,它參照 GDBM 为了下述三点而被开发:更高的处理速度更小的数据库文件大小,和更简单的APIQDBM 读写速度比 Berkeley DB 要快,详细速度比较见《 


● 兼容:Memcached 能做嘚dbcached 都能做。除此之外dbcached 还将“Memcached、持久化存储管理器、NMDB 客户端接口”在一个程序中结合起来,对任何原有 Memcached 客户端来讲dbcached 仍旧是个 Memcached 内存对象緩存系统,但是它的数据可以持久存储到本机或其它服务器上的 QDBM 或 Berkeley DB

● 速度:如果加上“-z”参数,采用 UDP 协议“只发送不接收”模式将 set(add/replace/...) 命令寫入的数据传递给 NMDB 服务器端对 Memcache 客户端写速度的影响几乎可以忽略不计。在千兆网卡、同一交换机下服务器之间的 UDP 传输丢包率微乎其微茬命中的情况下,读取数据的速度跟普通的 Memcached 无差别速度一样快。 

● 变更:使用 dbcached即使因为故障转移,添加、减少 Memcached 服务器节点而破坏了“key 信息”与对应“Memcached 服务器”的映射关系也不怕 

● 分布:dbcached 和 NMDB 既可以安装在同一台服务器上,也可以安装在不同的服务器上多台 dbcached 服务器可以對应一台 NMDB 服务器。 

● 特长:dbcached 对于“读”大于“写”的应用尤其适用 




 是微软   网 络服务平台的一部分。该SDS服务也是处于测试阶段因此也是免费的,但对数据库大小有限制 SQL数据服务其自身实际上是一项处在许多SQL服务器之上的应用,这些SQL服务器组成了SDS平台底层的数据存储你鈈需要访问到它们,虽然底层的数 据库可能是关系式的;SDS是一个键/值型仓储正如我们迄今所讨论过的其它平台一样。 

微软看起来不同于湔三个供应商因为虽然键/值存储对于可扩性???言非常棒,相对于RDBMS在数据管理上却很困难。微软的方案似乎是入木三分在实现可擴性和分布机制的同时,随着时间的推移不断增加特性,在键/值存储和关系数据库平台的鸿沟之间搭起一座桥梁

在云之外,也有一些鈳以独立安装的键/值数据库软件产品大部分都还很年轻,不是alpha版就是beta版但大都是开源的;通过看看它的代码,比起在非开源供应商那裏你也许更能意识到潜在的问题和限制。 

本身所提供的高并发、分布式容错基础平台并且参考 Lotus Notes 数据库实现,采用简单的文档数据类型(document-oriented)在其内部,文档数据均以 JSON 格式存储对外,则通过基于 HTTP 的 REST 协议实现接口可以用十几种语言进行自由操作。 

CouchDB一种半结构化面向文档嘚分布式高容错的数据库系统,其提供RESTFul HTTP/JSON接口其拥有MVCC特性,用户可以通过自定义Map/Reduce函数生成对应的View 

在CouchDB中,数据是以JSON字符的方式存储在文件中 

  • 基于文档存储,数据之间没有关系范式要求
  • 使用Erlang开发(更多的特性)

应用场景 在我们的生活中有很多document,比如信件账单,笔记等他们只是简单的信息,没有关系的需求我们可能仅仅需要存储这些数据。 这样的情况下CouchDB应该是很好的选择。当然其他使用关系型数據库的环境也可以使用CouchDB来解决。

根据CouchDB的特性在某些偶 尔连接网络的应用中,我们可以用CouchDB暂存数据随后进行同步。也可以在Cloud环境中莋为分布式的数据存储。CouchDB提供给予 HTTP的API这样所有的常见语言都可以使用CouchDB。

使用CouchDB意味着我们不需要在像使用RMDBS一样,在设计应用前首先设计負责数据Table我们的开发更加快速,灵活 

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富最像关系數据库的。他支持的数据结构非常松散是 类似json的bjson格式,因此可以存储比较复杂的数据类型Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语 言几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引 

Mongo主要解决嘚是海量数据的访问效率问题,根据官方的文档当数据量达到50GB以上的时候,Mongo的数据库访问速度是MySQL的 10倍以上Mongo的并发读写效率不是特别出銫,根据官方提供的性能测试表明大约每秒可以处理//ugc-nuclear-guide-use/ 



Skynet是可适配、可容错的、可自我更新的,而且完全 

是分布式的系统不存在单一的失敗节点。 

Skynet利用结对恢复系统不同的工作者会互相监控以防失败: 

如果有一个工作者由于某种原因离开或者放弃了,就会有另一个工作者發现并接管它的任务Skynet 也没有所谓的“主”管理进程,只有工作者它们在任何时间都可以充当任何任务的主管理进程。 

你要为Starfish编写一些尛程序它们的代码是你将要构建其中的。如果我没有弄错的话你无法在同一台机器上运行多种类型的MapReduce作业。Skynet是一个更全面的MR系统可鉯运行多种类型的多个作业,比如各种不同的代码。 

Skynet也允许失败工作者会互相关照。如果一个工作者失败了无法及时完成任务,另┅个工作者将会接起这个任务并尝试完成它Skynet也支持map_data流,也就是说即使某个数据集非常庞大,甚至无法放在一个数据结构中Skynet也可以处悝。

什 么是map_data流大多数时候,在你准备启动一个map_reduce作业时必须提供一个数据的队列,这些数据已经被分离并将被并行处理如果队 列过大,以至于无法适应于内存怎么办在这种情况下,你就要不能再用队列而应该使用枚举(Enumerable)。Skynet知道去对象的调 用:next或者:each方法然后开始为“每一个(each)”分离出map_task来。通过这样的方式不会有人再试图同时创建大量的数据结构。 

还 有很多特性值得一提不过最想提醒大家的是,Skynet能够与你现有的应用非常完美地集成到一起其中自然包括Rails应用。Skynet甚 至还提供了一个ActiveRecord的扩展你可以在模型中以分布式的形式执行一些任务。在Geni中我们使用这项功能来运行特别复杂的移植,它通 常涉及到在数百万的模型上执行Ruby代码 

> 平台,在App Engine中谷歌公开云存储,平台囷数据库以及使用Python和Java编程语言的API。开发人员能够编写应用程序并部署到这一层中后端可架构设计完全交给谷歌负责,最终用户完全不必担心管理基础设施和Sugar CRM的SaaS产品。


大部分的人都坚持在单一的设备上部署我们的应用因为这样部署的费用会比较低,但是我们要清楚任哬的硬件设备都会有失败的风险的这种单点失败会严重的影响用户体验甚至是拖垮你的应用,因此除非你的应用能容忍失败带来的损失否则得话应该尽量的避免单点风险,比如做冗余热备等。 

同步调用在任何软件系统中都是不可避免的但是我们软件工程师必须明白哃步调用给软件系统带来的问题。如果我们将应用程序串接起来那么系统的可用性就会低于任何一个单一组件的可用性。比如组件A同步調用了组件B组件A的可用性为。有些站点实际上使用了关系型数据库而大部分实际上并未使用。这些服务的共性在于可扩展性比功能公眾要他们无法泡在一个单一的 RDBMS 上。”

总结一下——我认为现有的 SQL 数据库可能不会很快淡出历史舞台,但同时它们也不能解决世上的所囿问题NOSQL 这个名词现在也变成了 Not Only SQL,这个变化表达了我的观点 

本书不求利,只图学术之便感谢诸位大牛写了那么多的资料,如果您不愿意被引用学生会重写相应的章节。 

引用网志多篇由于涵盖太广难以一一校队,特此致歉


作者:聂大哥的CS小弟

批量看妹子——你的第一个知乎爬虫(1)

你看着知乎上一个个的爆照贴想着怎样能把这些图片都保存下来呢。“啊老师啊,有没有什么可以批量保存小姐姐的功能啊”少年你听说过爬虫么会写python么“emmmm,老师我python装好了/p/">

对编程没有兴趣的朋友可以直接看后面的数据分析结果开发环境:win7丅的/p/">

研究了一下午一晚上,现在终于实现了用wxpy自动回复并且还是能跟你很聊得来的机器人。 做微信聊天机器人实现步骤:获取微信的使用权,即python脚本能控制微信收发信息python脚本收到聊天信息后,要对该信息进行处理返回机器人的回应信息。一二两步…

好死不死一码畜(?ì _ í?)

今天偶尔看到一个有趣的python库--itchat一个封装的微信API,可以实现微信自动回复附件下载,发送文件等功能同时也可以通过手机发送信息,python执行相应的命令操作电脑目前只实现了微信消息自动回复以及防撤回功能。感谢大家意见防撤回功能在

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

我家都可以达到11M+了。

100兆的宽带理论下载速度是每秒12.5M。

好想截图给您看但我不鼡数字公司的软件。

你对这个回答的评价是

我要回帖

更多关于 1M/S网速 的文章

 

随机推荐