自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

转载 简单的Vector Clock

上一篇文章中说过Dynamo为了解决数据一致性问题使用了Vector Clock。基本思想就是对同一份数据的每一次修改都加上的标签。在搜索相关资料的时候发现了另一个有意思的项目,Riak。Riak可以说是一个类Dynamo的Erlang实现,更多相关介绍可以参考下边链接。本文来自Riak主页上的一篇blog,简单介绍Vector Clock以及在Riak中的使用。虽然名为“简单的Vector Cl

2013-08-29 22:50:35 1013

转载 一致性哈希算法(Consistent Hashing)

应用场景这里我先描述一个极其简单的业务场景:用4台Cache服务器缓存所有Object。那么我将如何把一个Object映射至对应的Cache服务器呢?最简单的方法设置缓存规则:object.hashCode() % 4。Cache 0:object.hashCode() % 4 == 0Cache 1:object.hashCode() % 4 ==

2013-08-28 23:18:30 957

转载 Mysql Innodb中undo-log和MVCC多版本一致性读 的实现

ysql Innodb中undo-log和MVCC多版本一致性读 的实现本文主要介绍mysql中innodb引擎undo-log和事务中MVCC多版本一致性读的实现。1. 概述Innodb引擎的undo日志是记录在表空间中单独的回滚段中。当mysql做update和delete操作的时候,实际的后台都是先把旧记录“删”了,如果是update和insert再把新记录“插入

2013-08-28 22:59:02 1613

转载 深入浅出INNODB MVCC机制与原理

摘要:1、基础知识2、MVCC实现原理以及视图化理解(包含些测试以便理解)3、深MVCC实现机制一、基础知识事务:事务是一组原子性sql查询语句,被当作一个工作单元。若mysql对改事务单元内的所有sql语句都正常的执行完,则事务操作视为成功,所有的sql语句才对数据生效,若sql中任意不能执行或出错则事务操作失败,所有对数据的操作则无效(通过回滚恢复数据)。事务有四个属性

2013-08-28 21:25:22 2883

转载 Jetty源码学习5-NIO架构网络服务器

引言一个优秀的框架能从中学到很多东西,撇开代码不说,它所涉及到的技术也是非常通用的,藉此总结下NIO、JMX、HttpClient、Continunation在Jetty中的应用,当然对于Http的解析HttpParser也算是一个。本文主要是总结网络服务器的架构与NIO在Jetty中的应用,关于NIO的操作系统底层原理并没有深入研究,只总结了我对于NIO的理解。网络架构对

2013-08-28 00:26:15 1354

转载 不重复随机数列生成算法

本文将讲述一个高效的不重复随机数列的生成算法,其效率比通常用hashtable 消重的方法要快很多。作者:eaglet 转载请注明出处。首先我们来看命题:给定一个正整数n,需要输出一个长度为n的数组,数组元素是随机数,范围为0 – n-1,且元素不能重复。比如 n = 3 时,需要获取一个长度为3的数组,元素范围为0-2,比如 0,2,1。这个问题的通常解决

2013-08-25 20:13:49 723

转载 海量数据处理常用思路和方法

大数据量的问题是很多面试笔试中经常出现的问题,比如 google、淘宝、百度、 腾讯 这样的一些涉及到海量数据的公司经常会问到。下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎与我讨论。1

2013-08-25 18:08:36 868

转载 平均数、中位数、众数的特点及应用场合

平均数、中位数、众数都是度量一组数据集中趋势的统计量。所谓集中趋势是指一组数据向某一中心值靠拢的倾向,测度集中趋势就是寻找数据一般水平的代表值或中心值。而这三个特征数又各有特点,能够从不同的角度提供信息。平均数特点:计算用到所有的数据,它能够充分利用数据提供的信息,它具有优 的数学性质,因此在实际应用中较为广泛。但它受极端值的影响较大。应用场合:没有极端值的情况下数据集中趋势的刻画。

2013-08-25 09:47:36 34693

转载 LSM-Tree (BigTable 的理论模型)

Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题。MergeDump的理论基础是LSM-Tree (Log-Structured Merge-Tree), 原文见:LSM Tree下面先说一下LSM-Tree的基本思想,再记录下读文章的几点感受。L

2013-08-22 23:44:06 692

转载 Google Spanner原理- 全球级的分布式数据库

Google Spanner简介Spanner 是Google的全球级的分布式数据库 (Globally-Distributed Database) 。Spanner的扩展性达到了令人咋舌的全球级,可以扩展到数百万的机器,数已百计的数据中心,上万亿的行。更给力的是,除了夸张的扩展性之外,他还能同时通过同步复制和多版本来满足外部一致性,可用性也是很好的。冲破CAP的枷锁,在三者之间完美平衡。

2013-08-21 00:29:12 960

转载 淘宝的KV存储系统的设计思路总结-tair系统

tair系统功能:(主要用来对付那些静态化相关资源)1、作为架设在各类存储介质前边的一层系统2、可以用来存储cache数据,也可以持久化数据一、要解决的问题1、当用户访问数据为海量的时候,并且并发太大的时候直接访问数据库会让数据库被穿透,直接宕机2、淘宝的用户信息和产品信息数据调用量是海量二、设计思路1、初期设计思路(

2013-08-21 00:22:04 1310

转载 Yahoo!的分布式数据平台PNUTS简介及感悟

在分布式领域有个CAP理论(Brewer’s CAP Theorem) ,是说Consistency(一致性), Availability(可用性), Partition tolerance(分布) 三部分在系统实现只可同时满足二点,没法三者兼顾。所以架构设计师不要把精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍,选取最适合应用需求的其中之二。比如MySQL 5.1 clust

2013-08-21 00:14:24 917

转载 SkipList 跳表

今天有同学去面试,被问到了“跳表”这种数据结构,说实话我之前对它了解不多,于是上网查了跳表的资料,并在这里总结一下。什么是跳表?要说清楚这个问题,我们就要先从普通的有序链表说起。一个普通有序列表的结构如下:我们可以看到,上图所示的链表按照由小到大的顺序排列(-1表示最小值,1表示最大值,这是本文的一个约定),如果我们想要查找一个元素x,算法如下:12

2013-08-19 23:07:14 537

转载 两阶段提交与三阶段提交的区别

没有任何事情是完美的。特别是在分布式的情况下。事实上,分布式在某个程度上其实是人类社会发展的一个极佳写真。因为人类社会中个体的可靠性显然比分布式系统节点的可靠性要低很多。三阶段提交也不完美。但是它比两阶段好。两阶段的问题可以这样分解:1,协调者出错,参与者也出错;2,协调者出错,参与者不出错;3,协调者不出错,参与者出错;4,协调者不出错,参与者也不

2013-08-18 23:50:11 1367

转载 多版本并发控制(MVCC)在分布式系统中的应用

问题最近项目中遇到了一个分布式系统的并发控制问题。该问题可以抽象为:某分布式系统由一个数据中心D和若干业务处理中心L1,L2 … Ln组成;D本质上是一个key-value存储,它对外提供基于HTTP协议的CRUD操作接口。L的业务逻辑可以抽象为下面3个步骤:read: 根据keySet {k1, … kn}从D获取keyValueSet {k1:v1, … kn:vn}do: 根

2013-08-18 16:18:48 792

转载 淘宝海量数据库之一

作为一个电子商务企业,从一开始,数据库及其事务能力在淘宝就扮演着十分关键的角色,淘宝也积累了丰富的数据库的架构和规划等方面的经验,产生了众多优秀的DBA。 淘宝是一家迅速发展的公司。全球网站排名公司Alexa提供的数据显示,2010年4月27日,Amazon、Ebay的用户占全球互联网用户的百分比分别为3.47%和2.68%,而淘宝的用户占全球互联网用户的百分比则达到了4.1%,淘

2013-08-18 14:09:00 808

转载 代理重定向策略及其用户感受的分析

大家会碰到类似这样的事情,比如,找你的租房中介负责人让处理一下空调坏了,中介负责人回答你说“我现在不负责你了 ,你去联系A。”你觉得这件事有些不爽,没办法,去联系A。说不定A又会说自己不负责了,让你联系B。碰到这种“你去联系XXX”的情况,我想没有人会开心的。如果这样的“重定向”形成了环,那么用户一直被“踢皮球”,不会得到处理。用户就要抓狂了!PS:是不是想到了有关部门的处

2013-08-18 13:59:35 1107

转载 ORACLE 索引原理

(本文内容均整理自万能的INTERNET)B-TREE索引一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。    对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)都具

2013-08-18 10:48:01 563

转载 oracle 索引聚簇表的工作原理

一:首先介绍一下索引聚簇表的工作原理:   聚簇是指:如果一组表有一些共同的列,则将这样一组表存储在相同的数据库块中;聚簇还表示把相关的数据存储在同一个块上。利用聚簇,一个块可能包含多个表的数据。概念上就是如果两个或多个表经常做链接操作,那么可以把需要的数据预先存储在一起。聚簇还可以用于单个表,可以按某个列将数据分组存储。   更加简单的说,比如说,EMP表和DEPT表,这两个表存

2013-08-18 10:40:11 734

转载 oracle索引原理(b-tree,bitmap,聚集,非聚集索引)

B-TREE索引一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。可以用下图一来描述B树索引的结构。其中,B表示分支节点,而L表示叶子节点。    对于分支节点块(包括根节点块)来说,其所包含的索引条目都是按照顺序排列的(缺省是升序排列,也可以在创建索引时指定为降序排列)。每个索引条目(也可以叫做每条记录)都具有两个字段。第一个字段表示

2013-08-18 10:38:46 811

转载 聚集索引和非聚集索引的区别

聚集索引:物理存储按照索引排序  非聚集索引:物理存储不按照索引排序优势与缺点聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快 聚集索引的区别  聚集索引:物理存储按照索引排序  非聚集索引:物理存储不按照索引排序优势与缺点聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首

2013-08-18 10:26:31 683

转载 Hash冲突的解决--暴雪的Hash算法

值得一提的是,在解决Hash冲突的时候,搞的焦头烂额,结果今天上午在自己的博客内的一篇文章(十一、从头到尾彻底解析Hash表算法)内找到了解决办法:网上流传甚广的暴雪的Hash算法。 OK,接下来,咱们回顾下暴雪的hash表算法:“接下来,咱们来具体分析一下一个最快的Hash表算法。我们由一个简单的问题逐步入手:有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否

2013-08-18 01:47:20 1189

转载 一种可以避免数据迁移的分库分表scale-out扩容方式

一种可以避免数据迁移的分库分表scale-out扩容方式目前绝大多数应用采取的两种分库分表规则mod方式dayofweek系列日期方式(所有星期1的数据在一个库/表,或所有?月份的数据在一个库表)这两种方式有个本质的特点,就是离散性加周期性。例如以一个表的主键对3取余数的方式分库或分表:那么随着数据量的增大,每个表或库的数据量都是各自增长。当

2013-08-17 01:27:48 894

转载 HTTPS是如何保证连接安全:每位Web开发者都应知道的

“HTTPS协议的工作原理是什么?”这是我在数天前工作项目中需要解决的问题。作为一名Web开发者,我当然知道 HTTPS 协议是保障用户敏感数据的好办法,但并不知道这种协议的内在工作机制。它怎么保护数据?有人监听线路的情况下,服务器与客户端之间如何建立安全的连接?安全证书又是什么,为什么还要花钱买呢? 一系列通道在深入讲解原理细节之前,让我们首先简单了解下H

2013-08-15 21:18:02 797

转载 cglib和asm相关的文章

温故了一个cglib和asm,找到几篇写得比较好,介绍得比较清楚的文章:    1、CGlib简单介绍,访问地址:http://www.blogjava.net/stone2083/archive/2008/03/16/186615.html,从简单的示例到不同业务场景的变化,一步步让读者明白,为什么要使用cglib以及哪种场景下需要使用cglib;    2、cglib源码学习交

2013-08-14 20:10:03 784

转载 Java 理论与实践: 非阻塞算法简介

在不只一个线程访问一个互斥的变量时,所有线程都必须使用同步,否则就可能会发生一些非常糟糕的事情。Java 语言中主要的同步手段就是 synchronized 关键字(也称为内在锁),它强制实行互斥,确保执行 synchronized 块的线程的动作,能够被后来执行受相同锁保护的 synchronized 块的其他线程看到。在使用得当的时候,内在锁可以让程序做到线程安全,但是在使用锁定保护短的代码路

2013-08-14 20:07:10 592

转载 《深入浅出 Java Concurrency》目录

这是一份完整的Java 并发整理笔记,记录了我最近几年学习Java并发的一些心得和体会。 J.U.C 整体认识原子操作 part 1 从AtomicInteger开始原子操作 part 2 数组、引用的原子操作原子操作 part 3 指令重排序与happens-before法则原子操作 part 4 CAS操作锁机制 part 1 Lock与ReentrantLock锁机制 par

2013-08-14 20:02:36 1255

转载 使用ASM来书写Java代码-3

1.   Signature:a)        说明:J2SE 5.0为了支持范型,参数化参数,Annotation和枚举等新增特性,因此增加了一个Signature属性,作为类,字段,方法的Description之外的一个辅助机制。 2.   Annotation:a)        Annotation:                      i.          

2013-08-14 19:58:36 838

转载 使用ASM来书写Java代码-2

1.   类:a)        数组:                      i.              创建:mv.visitInsn(ICONST_3);mv.visitIntInsn(NEWARRAY, T_INT);mv.visitVarInsn(ASTORE, 1);      //   将数组引用存到局部变量栈1号的位置 等价于:int[] a

2013-08-14 19:53:36 1192

转载 代码动态生成利器ASM

小巧而神奇的ASMASM是一套JAVA字节码生成架构。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。 ASM 提供了与 BCEL( http://jakarta.apache.org/bcel )和SERP( http://serp.sourceforge.net/ )相似的功能,只有22K的大小,比起350K的BCEL和150K的

2013-08-14 19:51:58 846

转载 使用ASM来书写Java代码-1

1.   流程控制:a)        说明:JVM提供了基本的流程控制结构,这些结构都是基于Label而实现的。这些跳转指令,包括基于比较结果的有条件跳转和无条件的GOTO指令。另外,JVM也提供了实现switch结构的LOOKUPSWITCH和TABLESWITCH指令,其中LOOKUPSWITCH是基于键比较的,而TABLESWITCH则是基于键索引的,因此后者的匹配速度更快。

2013-08-14 19:49:16 616

转载 JVM字节码初探--字节码

理解JVM的指令的一个基础是理解JVM的栈内存,因此在开始之前最好先参阅一下《Java 栈内存介绍 》。本篇将结合例子对JVM的主要指令进行描述。     在开始之前,我们先了解一下如下的 “常识”:字长是根据JVM不同而定的,一般(并非一定)在32位机上是4个字节,64位机上是8个字节(使用8个字节很可能会潜在地存在内存浪费的情况),JVM规范上要求1个字必须至少能容纳int

2013-08-14 19:46:32 870

转载 ASM函数监听实现-之简单静态方法注入

1.目的:实现对函数执行监听,在函数调用前,后得到通知。考虑用asm来实现。 2.资料:在网上看到关于asm的技术资料,写了一个简单的实现。参考链接如下: http://www.cnblogs.com/eafy/archive/2008/06/18/1224633.html http://alvinqq.iteye.com/blog/940965 http://www.ibm.co

2013-08-14 19:44:16 2686

转载 实时计算应用场景

实时计算的概念很难定义,每个人对这四个字的理解可能都不同。个人观点主要分为两块:数据的实时入库和数据的实时计算。数据实时入库的时候,一般都需要对原始数据做一定的处理再入库。能在这个步骤计算尽量在这里完成。 这个类似数据的预算后入库,然后提供直接读取服务。对用户的延时性上最好。然而有一些对数据的计算并不能通过预算解决全部问题,比如搜索。这篇主要讲实时计算的应用场景,技术架构、实现细节

2013-08-14 19:39:56 1998

转载 Perf -- Linux下的系统性能调优工具

Perf 简介Perf 是用来进行软件性能分析的工具。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。最初的时候,它叫做 Performance counter,在 2.

2013-08-14 19:33:06 645

转载 理解inode

理解inode作者:阮一峰一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块"

2013-08-14 01:05:58 663

转载 Linux文件系统十问,你知道吗?

Linux文件系统十问--关于文件系统,你知道吗? 作者:yanfei,腾讯后台架构师  关于文件系统,相信大家都不陌生。身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢。那么让我们一起来看一下下面这一组Linux文件系统相关的问题吧:1、机械磁盘随机读写时速度非常慢,操作系统是采用什么技巧来提高随机读写的性能的?2、t

2013-08-13 23:11:33 935

转载 Java内存调优经验总结

JVM 调优,是个很简单也很复杂的话题,由于经常遇到这类问题,在这里总结一下。先从解决bug开始,当Java程序申请内存,超出VM可分配内纯的时候,VM首先可能会GC,如果GC完还是不够,或者申请的直接超够VM可能有的,就会抛出内 存溢出异常。从VM规范中我们可以得到,一下几种异常。java.lang.StackOverflowError:(很少)java.lang.OutOfMemo

2013-08-12 23:02:23 720

原创 Direct Memory

1、不属于java堆内存、分配内存其实是调用操作系统的Os:malloc()函数。2、容量可通过-XX:MaxDirectMemorySize指定,如果不指定,则默认与Java堆的最大值(-Xmx指定)一样。3、Direct Memory 内存的使用避免Java堆和Native堆中来回复制数据。从某些场景中提高性能。4、直接ByteBuffer对象会自动清理本机缓冲区,但这个过程只能作

2013-08-12 22:42:30 1797

转载 使用 google-perftools 剖析程序性能瓶颈

简介: google-perftools 是一款优秀的 Linux C/C++ 程序的性能剖析及优化工具,它提供了将目标程序运行时所消耗的 CPU 时间片进行剖析和图形化输出剖析结果的功能。本文将从零开始,一步一步引导读者搭建并运行一个 google-perftools 的剖析环境,并用一个示例来演示如何使用该工具找到目标程序的性能瓶颈。发布日期: 2010 年 12 月 16 日

2013-08-12 00:20:58 1116 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除