- 浏览: 7262 次
- 来自: ...
最新评论
文章列表
从以下几个维度,对redis、memcache、mongoDB 做了对比,欢迎拍砖
1、性能
都比较高,性能对我们来说应该都不是瓶颈
总体来讲,TPS方面redis和memcache差不多,要大于mongodb
2、操作的便利性
memcache数据结构单一
red ...
cache的改造过程
- 博客分类:
- 技术
一个cache的改造过程
在分布式的程序中,cache的合理使用可以带来性能上的极大提升,尤其是在资源创建需要昂贵的开销时。cache的设计最重要的是要保证线程安全和高效性。下面以代码为例,介绍了三种cache的写法。
1. 粗放的加锁
public class Cache1 { private HashMap<String, ServerGroup> route2SG = null; public Cache1() { route2SG = new HashMap<String, ServerGroup>(); } public synchronized Ser ...
性能测试原理 - 吞吐量解析
- 博客分类:
- 技术
好多人对吞吐量的概念不是很清楚, 有人认为TPS就是吞吐量,也有人把单位时间内系统处理数据量(kilobytes per second)作为吞吐量,那么那个是正确的答案呢? TPS(transaction per second), 顾名思义,是单位时间内处理事物的数量。 ...
LSM-Tree (BigTable 的理论模型)
- 博客分类:
- 技术
Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题。
MergeDump的理论基础是LSM-Tree (Log-Structured Merge-Tree), 原文见:LSM Tree
下面先说一下LSM-Tree的基本思想,再记录下读文章的几点感受。
LSM思想非常朴素,就是将对数据的更改hold在内存中,达到指定的threadhold后将该批更改批量写入到磁盘,在批量写入的过程中跟已经存在的数据做rolling merge。
拿update举个例子:
比如有10 ...
NIO非堵塞应用通常适用用在I/O读写等方面,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会 ...
软件腐化的机种表现:
l 僵化性(Rigidity):一个改动引起一连串的改动,必须改动的模块越多,设计就越僵化。
l 脆弱性(Fragility):改一个地方,N个地方都会出问题。
l 牢固性(Immobility):设计中包含了一些可供其他系统有用的部分,但又无法剥离出去。
l 粘滞性(Viscosity):要修改某些功能,无法沿用之前的设计,而不得不破坏之前的设计。
l 不必要的复杂性(Needless Complexity):过度设计。
l 不必要的重复(Needless Repetition):Copy代码。
l 晦涩性(Opacity):难理解。
为什么要使用NIO
企业级应用效率是关键。而CPU已不再是的束缚,效率主要消耗在IO上。java.io类则喜欢一铲子一铲子地加工数据。而操作系统喜欢整卡车地运来数据,有了NIO,就可以轻松地把一卡车数据备份到您能直接使用的地方(ByteBuffer对象)。
IO的常用概念
IO操作:向操作系统发出请求,把数据移出和移入缓冲区。
用户空间:是常规进程所在区域。JVM就是常规进程,驻守于用户空间。用户空间是非特权区域:比如,在该区域执行的代码就不能直接访问硬件设备。硬件通常不能直接访问用户空间。
内核空间:它能与设备控制器通讯,控制着用户区域进程的运行状态等等。最重要的是,所有I/O都直接或间接通 ...