
NOSQL
笑天居士
天下风云出我辈,一入江湖岁月催。皇图覇业谈笑中,不胜人生一场醉。
展开
-
HBase,想说爱你不容易啊!
2013年DB-Engines的数据库人气排行榜 : 如此看来即使HBase最后可以成为NoSQL领域的领军者,这条成功路上也是遍地荆棘。优点:从开发者角度上来看,HBase提供的强一致性会让开发过程变得轻松。而这里对于最终一致性存在的误区就是:它改善的是写入的速度——持续的写操作可能会造成延迟,为了保持最终一致性付出了代价,却没有达到应有的效果。基本转载 2013-11-13 11:22:06 · 1497 阅读 · 0 评论 -
Mongodb写入安全机制--GetLastError
一、简介很多人抱怨mongodb是内存数据库,也没有事务,会不安全,其实这都是对Mongodb的误解,Mongodb有完整的redolog,binlog和持久化机制,不必太担心数据丢失问题。journal是Mongodb中的redo log,而Oplog则是负责复制的binlog(对应Mysql)。在google.groupuser上,mongo的开发者有一段这样的转载 2013-12-06 10:33:24 · 2131 阅读 · 0 评论 -
实现一个简单的服务端推送方案-实例篇Polling(服务端阻塞读)
前面讲过一篇《实现一个简单的服务端推方案-实例篇Polling》,那篇文章服务端的实现是不停的轮循数据库,这篇将服务器端轮循数据库改为服阻塞的方式读取队列,减轻数据库服务器的压力。客户端代码,JS库为prototype.js:无标题文档 var Class = { create: function() { return fun原创 2013-12-05 21:08:01 · 2092 阅读 · 0 评论 -
粉碎5个NoSQL流言:各司其职,NoSQL的出现比关系型更早
摘要:任何事物在大肆宣传下都会被蒙上一些夸张、不切实际的光环,NoSQL运动同样如此,本文将揭穿一些广被认同并影响深远的流言。巴西人Henrique Lobo Weissmann(还有个名字叫Kico Lobo)是咨询公司itexto的联合创始人,他还在2008年创立了Grails Brasil——巴西最大的Groovy and Grails 用户组织,当下成员已超过1700个,仍转载 2013-12-06 10:12:19 · 934 阅读 · 0 评论 -
Mongodb持久化--journal探究
Mongodb在1.8版本之后开始支持journal,就是我们常说的redo log,用于故障恢复和持久化。 一、启动 启动journal功能使用mongod --journal选项,也可以关闭--nojournal,在2.0之后的版本,journal都是默认打开的,以确保数据安全。在version 由于Mongodb会事先初始化journal空间,而且在转载 2013-12-06 10:16:00 · 3652 阅读 · 0 评论 -
NoSQL 数据建模技术
全文译自墙外文章“NoSQL Data Modeling Techniques”,译得不好,还请见谅。这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉。我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西。总体来说,我觉得NoSQL更适合做Cache。下面是正文——NoSQL 数据库经常被用作很多非功能性的地方,如,扩展转载 2013-12-06 10:35:11 · 1417 阅读 · 0 评论 -
如何解决秒杀的性能问题和超卖的讨论
最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。ps:进入正文前先说一点个人感受,之前看淘宝的ppt感觉都懂了,等到自己出解决方案的时候发现还是有很多想不到的地方其实都没懂,再次验证了“细节是魔鬼”的理论。并且一个人的能力有限,只有大家一起讨论才能想的更周全,更细致。好了,闲话少说,下面进入正文。 一、转载 2014-05-14 09:44:21 · 1978 阅读 · 1 评论 -
实现一个简单的服务端推送方案
客户端和服务端的交互有推和拉两种方式:如果是客户端拉的话,通常就是Polling;如果是服务端推的话,一般就是Comet,目前比较流行的Comet实现方式是Long Polling。注:如果不清楚相关名词含义,可以参考:Browser 與 Server 持續同步的作法介紹。先来看看Polling,它其实就是我们平常所说的轮询,大致如下所示:Polling转载 2013-12-03 09:27:52 · 4241 阅读 · 0 评论 -
使用Redis来实现LBS的应用
微信、陌陌 架构方案分析近两年、手机应用,莫过于微信、陌陌之类最受欢迎;但实现原理,分享文章甚少。故,提出两种方案,供分享;不对之处,敬请留言学习。目标解决大型应用(微信、陌陌级别)中,用户经纬度在不断更新,用户查找频繁的问题。(每分钟1000W级)方案A:本方案前,请先阅读:基于LBS功能应用的Geohash方案,看过该文章便可简单知道;1转载 2014-07-01 11:07:01 · 7506 阅读 · 1 评论 -
再谈Redis应用场景
一、MySql+Memcached架构的问题实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:1)MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。2)Memcached与My转载 2014-07-01 10:43:39 · 2180 阅读 · 0 评论 -
memcache的最佳实践方案
基本问题1、memcached的基本设置 1)启动Memcache的服务器端 # /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid-d选项是启动一个守护进程, -m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,转载 2014-05-28 09:15:07 · 1015 阅读 · 0 评论 -
redis设计思想
不同于nginx的精雕细琢,redis代码的风格趋向于简洁实用。简洁启事,下面所述不再列举任何源码,不拼凑任何外来资料。去除末枝,下面直入redis主题,尽可能简洁地描述redis的设计思想。整体模型:单进程单线程事件驱动模式。Redis在主处理流程中,采用了单进程接受各种client请求并返回结果,整体处理流程采用事件驱动的方式进行。通过其IO复用的方式监听aeEventLoop转载 2014-06-20 12:05:46 · 1903 阅读 · 0 评论 -
MYSQL Handler Socket插件(三)优势和缺陷阐述
HandlerSocket的优势和特点:1) 支持多种查询模式HandlerSocket目前支持索引查询(主键索引和非主键的普通索引均可),索引范围扫描,LIMIT子句,也即支持增加、删除、修改、查询完整功能,但还不支持无法使用任何索引的操作。另外支持execute_multi() 一次网络传输多个Query请求,节省网络传输时间。2) 处理大量并发连接Handle转载 2013-12-07 09:37:05 · 1417 阅读 · 0 评论 -
MYSQL Handler Socket插件(二)性能测试
HandlerSocket Oprofile测试报告(MySQL通过SQL执行K/V查询的Oprofile信息)MySQL执行SQL语句,首先要经过SQL解析阶段,调用MYSQLparse() 和MYSQLlex() 进行语法和词法解析;然后进入查询优化阶段,调用make_join_statistics() 和JOIN::optimize() 获得统计信息和生成执行转载 2013-12-07 09:36:59 · 1740 阅读 · 0 评论 -
MYSQL Handler Socket插件(一)原理
HandlerSocket的应用场景:MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等。不可否认,在做一些简单查询(尤其是PK查询)的时候,很多NoSQL产品比MySQL要快很多,而且前台网站上的80%以上查询都是简洁的查询业务。MySQL通过HandlerSocket转载 2013-12-07 09:36:53 · 1939 阅读 · 0 评论 -
使用 Redis 实现分布式系统轻量级协调技术
在分布式系统中,各个进程(本文使用进程来描述分布式系统中的运行主体,它们可以在同一个物理节点上也可以在不同的物理节点上)相互之间通常是需要协调进行运作的,有时是不同进程所处理的数据有依赖关系,必须按照一定的次序进行处理,有时是在一些特定的时间需要某个进程处理某些事务等等,人们通常会使用分布式锁、选举算法等技术来协调各个进程之间的行为。因为分布式系统本身的复杂特性,以及对于容错性的要求,这些技术通常转载 2015-06-23 14:18:08 · 1765 阅读 · 0 评论 -
HBase WAL原理学习
1.概述 客户端往RegionServer端提交数据的时候,会写WAL日志,只有当WAL日志写成功以后,客户端才会被告诉提交数据成功,如果写WAL失败会告知客户端提交失败,换句话说这其实是一个数据落地的过程。在一个RegionServer上的所有的Region都共享一个HLog,一次数据的提交是先写WAL,再写memstore,示意图如下 2.HLog Class WAL的实转载 2013-12-06 10:28:33 · 3035 阅读 · 0 评论 -
HBase行锁RowLock源码分析(2)
HBase(0.89.20100726)中的RowLock使用及实现 HBase只实现了基于row-key的锁机制。 1.客户端代码 RowLock rl = table.lockRow ("test".getBytes()); Put p = new Put(rowkey, rl ); ....处理 table.unlockRow (rl);转载 2013-12-06 10:18:39 · 1423 阅读 · 0 评论 -
Web应用中的轻量级消息队列
原文地址:http://hi.baidu.com/thinkinginlamp/blog/item/27a18202578f3d054bfb511f.htmlWeb应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚至最后请求会堆积过多,转载 2013-12-04 15:58:40 · 2824 阅读 · 0 评论 -
Memcached变种产品介绍
国内外有很多基于Memcached开发的产品,这些产品支持所有Memcached的协议,同时侧重不同的应用场景,可以根据自己的应用需求选择合适的Memcached变种。下面分别介绍几种Memcached的变种产品。1. memcachedbmemcachedb是新浪网基于Memcached开发的一个开源项目。通过为Memcached增加Berkeley DB的持久化存储机制和异步主原创 2013-11-29 14:31:54 · 1197 阅读 · 0 评论 -
memcached 高可用工具 memcached-ha
MemcachedHA 包装一种memcached client 使系统达到对memcached的高可用控制。日本人开发的。项目地址:http://sourceforge.jp/projects/memcached-ha/1. 数据多点备份(主从数据同步)主系统通过MemcachedHA向Memcached中存放数据时,MemcachedHA会自动同步到其他的Memcach转载 2013-11-19 16:50:33 · 1837 阅读 · 0 评论 -
memcached深度分析
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对memcached的转载 2013-11-29 16:09:25 · 1464 阅读 · 0 评论 -
NoSQL生态系统
何为NoSQL?NoSQL不是一个工具,而是由一些具有互补性和竞争性的工具组成的一个概念,是一个生态圈。这些被称为NoSQL的工具,在存储数据的方式上,提供了一种与(基于SQL语言的)关系型数据库截然不同的思路。要想了解NoSQL,必须先了解现有的这些工具,去理解那些引导它们开拓出新的存储领域的设计思路。NoSQL其名在给NoSQL下定义之前,我们先来试着从它的名字上做一下解读。顾转载 2013-12-06 10:14:05 · 1154 阅读 · 0 评论 -
HBase行锁RowLock源码分析(1)
概论Google在那篇著名的Bigtable论文中提到,对Bigtable一行的读写是原子的(无论涉及到几个column),这样做的好处就是简化了并发机制,用户也能很容易理解。Bigtable本来也打算实现一个通用的transaction机制,但是最终他们发现大多数用户要的其实只是基于某一行的transaction,所以实现了RowLock,这大大的简化了系统的复杂度,提高了性能。由此可以转载 2013-12-06 10:17:57 · 1296 阅读 · 0 评论 -
HBase行锁RowLock源码分析(3)
1 行锁简介在事务特性方面,hbase只支持单row的事务,不能保证跨row(cross-row)的事务。hbase通过行锁来实现单row事务。客户端进行操作时,可以显式对某一个行加锁,但是大部分情况下是没有必要的,因为如果没有显式的加行锁,hbase在内部会默认的加行锁。为了描述方便,用户显式加的行锁简称为显式行锁。 源码1:客户端使用显式行锁的示例代码HTa转载 2013-12-06 10:19:46 · 1617 阅读 · 0 评论 -
深入剖析MongoDB架构
近日,软件工程师Ricky Ho的在他的博客里发表了一篇关于MongoDB架构(MongoDB Architecture)的博文,虽然这是一个听起来感觉很宽泛的话题,但是作者在文章中确实对MongoDB由内至外的架构进行了剖析。本文截取了其文章中的几张重点架构示意图进行简要描述。 1、MongoDB数据文件内部结构 MongoDB在数据存储上按命名空间来划分,一转载 2013-12-06 10:32:27 · 1068 阅读 · 0 评论 -
NoSQL to MySQL with Memcached
前些年,HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSocket并没有真正流行起来,不过庆幸的是MySQL官方受其启发,研发了基于InnoDB的Memcached插件,总算是在MySQL中延续了NoSQL的香火,以前单独架设Memcached服务器不仅浪费了内存,而且还必须自己维护数据的不一致问题,有了Memcac转载 2013-12-07 09:37:14 · 1414 阅读 · 0 评论 -
使用MySQL构建一个队列表
使用MySQL来实现队列表是一个取巧的做法,我们看到很多系统在高流量、高并发的情况下表现并不好。典型的模式是一个表包含多种类型的记录:未处理记录、已处理记录、正在处理记录等。一个或者多个消费者线程在表中查找未处理的记录,然后声称正在处理,当处理完成后,再将记录更新成已处理状态。一般的,例如邮件发送、多命令处理、评论修改等会使用类似模式。通常有两个原因使得大家认为这样的处理方式并不适合。原创 2013-12-01 18:58:01 · 5921 阅读 · 0 评论 -
用消息队列和消息应用状态表来消除分布式事务
由于数据量的巨大,大部分Web应用都需要部署很多个数据库实例。这样,有些用户操作就可能需要去修改多个数据库实例中的数据。传统的解决方法是使用分布式事务保证数据的全局一致性,经典的方法是使用两阶段提交协议。长期以来,分布式事务提供的优雅的全局ACID保证麻醉了应用开发者的心灵,很多人都不敢越雷池一步,想像没有分布式事务的世界会是怎样。如今就如MySQL和PostgreSQL这类面向低端用户的转载 2013-11-13 08:55:43 · 1987 阅读 · 0 评论 -
秒杀场景下MySQL的低效原因和改进
在「中国数据库技术大会」上,淘宝分享了「秒杀场景下MySQL的低效」,详细分析了秒杀的技术难点及改进措施,简而言之,主要就是在高并发事务请求的情况下,数据库性能由于死锁检测等因素直线下降,在这种场景下,单纯的关闭死锁检测虽然可以提升一定的性能,但这顶多是治标而已,如何治本?淘宝给出来两个改进方法:请求排队:如果请求一股脑的涌入数据库,势必会由于争抢资源造成性能下降,通过排队,让请求从混沌到原创 2013-11-12 16:44:54 · 7495 阅读 · 0 评论 -
Redis消息通知系统的实现
最近忙着用Redis实现一个消息通知系统,今天大概总结了一下技术细节,其中演示代码如果没有特殊说明,使用的都是PhpRedis扩展来实现的。内存比如要推送一条全局消息,如果真的给所有用户都推送一遍的话,那么会占用很大的内存,实际上不管粘性有多高的产品,活跃用户同全部用户比起来,都会小很多,所以如果只处理登录用户的话,那么至少在内存消耗上是相当划算的,至于未登录用户,可以推迟转载 2013-12-03 13:28:42 · 2591 阅读 · 2 评论 -
Q4M使用手册
Q4M (queue for mysql) 是开源的实现队列功能的工作于MySQL5.1版本下的存储引擎,目前最高版本仅支持mysql 5.1版本。一、概述1. Q4M模型是基于MySQL存储引擎的轻量级消息队列,通过扩展SQL语法来操作消息队列,使用简单,容易上手,开发人员基本不用再进行学习和熟悉。Q4M支持多发送方,多接收方,接收方相互不影响,支转载 2013-11-29 15:45:53 · 2120 阅读 · 0 评论 -
Redis的高级实用特性——发布及订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub/sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅原创 2013-12-11 11:38:20 · 8952 阅读 · 0 评论 -
Redis作者谈Redis应用场景
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。下面是一篇新鲜出炉的文章,其作者是Redis作者@antirez,他描述了Redis比较适合的一些应用场景。1.取最新N个数据的操作比如典型转载 2013-12-11 10:03:28 · 1956 阅读 · 0 评论 -
谈谈Redis的SETNX
在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效转载 2015-09-16 14:38:41 · 7503 阅读 · 0 评论