存档

文章标签 ‘数据库’

Daniel-Journey Weekly Dose –2012/1/30

2012年1月30日 admin 没有评论

Scalability

耗内存应用优化实际案例

Local Cache的小TIP

但本地缓存最大的问题就是数据同步,如果让集中式存储(cache,queue)来通知只会增加复杂度,因此通常最简单的方式就是根据业务数据的敏感度设置不同长短的本地失效时间。但现在如果要设置一个较短的有效期(例如一秒),对于计算机来说已经大大的减轻了压力(1秒对程序来说太久了),但是整体本地缓存对后端保护的效果不佳(特别是后端如果是并发处理能力较弱的系统),如果遇到并发量大的系统,那么就更为突出了。

OOP

Exceptions versus Return Values

深入浅出享元模式

单例模式是邪恶的么?

有状态vs无状态

Stateless or Stateful?
Service objects will usually be stateless. Stateless service layers are highly scalable: They pose no replication issues and there is no need to allocate additional resources for every client. (Remember that one of the key motivations of a middle tier is to share resources between multiple clients.) It is also much easier for stateless service layers to support remote clients, if necessary. A stateless service layer is one concession of object orientation that I find not too painful.

……
If possible, design applications to use a stateless service layer. Hold state in the web tier, rather than in the business logic tier, if possible.

LINUX

简明Vim 练级攻略

free命令中的buffers和cached

Understand UNIX / Linux Inodes Basics with Examples

An Inode number points to an Inode. An Inode is a data structure that stores the following information about a file :

  • Size of file
  • Device ID
  • User ID of the file
  • Group ID of the file
  • The file mode information and access privileges for owner, group and others
  • File protection flags
  • The timestamps for file creation, modification etc
  • link counter to determine the number of hard links
  • Pointers to the blocks storing file’s contents

JAVA

jvm performance tuning (notes)

Thread state transitions diagram

Optimizing ArrayList.removeAll

Performance techniques used in the Hotspot JVM

JAVA线程dump的分析— jstack pid

怎样使用jstack诊断Java应用程序故障

The Commando Pattern

Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1

Deep dive into assembly code from Java

"java -XX:+PrintOptoAssembly -server -cp . Main". The -XX:+PrintOptoAssembly is the magic option, and with this option I get the following, which shows the code of the "foo" method:

Throwable的fillInStackTrace方法

fillInStackTrace每次执行的时候,会清空原来的栈内的trace信息。然后在当前的调用位置处重新建立trace信息, 所以在方法b()中printStackTrace的执行结果跟c()中的是不一样的。 b()方法被c()调用,c()被a()调用,a()被main()调用, 所以在b()中fillInStackTrace时,栈内会包含b(), a(), main()的信息;而在c()中调用fillInStackTrace时,栈内的信息会被刷新为c(), a(), main()。

java数据结构-HashMap

Oracle时间索引的使用

Rope:理论与实践

Java?言默认的 String和 StringBuilder类很难支撑起操纵大量字符串的系统。rope 数据结构可能是更好的替代品。这篇文章介绍 Ropes for Java,这是针对 Java 平台的 rope 实现;本文还将研究性能问题,并提供一些有效使用 rope 库的指导。

Java Memory  Tips & Tricks

JAVA 基本数据类型长度

java关键字Transient

Java对象的大小

在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:

Object ob = new Object();

    这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。

   有了Object对象的大小,我们就可以计算其他对象的大小了。

Class NewObject {

    int count;

    boolean flag;

    Object ob;

}

    其大小为:空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小 (4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。

这里需要注意一下基本类型的包装类型的大小。因为这种包装类型已经成为对象了,因此需要把他们作为对象来看待。包装类型的大小至少是12byte(声明一个空Object至少需要的空间),而且12byte没有包含任何有效信息,同时,因为Java对象大小是8的整数倍,因此一个基本类型包装类的大小至少是16byte。这个内存占用是很恐怖的,它是使用基本类型的N倍(N>2),有些类型的内存占用更是夸张(随便想下就知道了)。因此,可能的话应尽量少使用包装类。在JDK5.0以后,因为加入了自动类型装换,因此,Java虚拟机会在存储方面进行相应的优化。

说说MaxTenuringThreshold这个参数

在计算存活周期这个阈值时,hotspot会遍历所有age的table,并对其所占用的大小进行累积,当累积的大小超过了survivor space的一半时,则以这个age作为新的存活周期阈值,最后取age和MaxTenuringThreshold中更小的一个值

如希望跟踪每次minor GC后新的存活周期的阈值,可在启动参数上增加:-XX:+PrintTenuringDistribution,输出的信息中的:
Desired survivor size 1048576 bytes, new threshold 7 (max 15)
new threshold 7即标识新的存活周期的阈值为7。

Understanding a Java thread dump

Java Memory Problems

The Top Java Memory Problems – Part 1

The Top Java Memortaiy Problems – Part 2

Hardware

Getting the hang of IOPS

Database

ORACLE数据库事务隔离级

当下列事件发生时,事务就开始了

1、连接到数据库,并执行第一条DML语句

2、前一个事务结束后,又输入了另一条DML语句

NETWOK

记一次TIME_WAIT网络故障

分类: 阅读 标签: , , , , , ,

Daniel-Journey Weekly Dose –2011/11/5

2011年11月6日 admin 没有评论

Database

一致性读的实现和原理

Java

【转】学习Java: Queue队列

offer,add区别:
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
poll,remove区别:
remove() 和 poll() 方法都是从队列中删除第一个元素(head)。remove() 的行为与 Collection 接口的版本相似,
但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
peek,element区别:
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

Concurrency Pattern: The Producer Consumer Pattern in Java

Concurrency Pattern: Producer and Consumer

投资

【炒股警言:导致99%的股民亏损的坏习惯】太过分散的投资。有些投资者喜欢到处打听小道消息、看电视股评,并买了许多股票,每只又买得不多,投资过于分散,导致分散了精力,对手上的股票都不够了解。当过多的信息让自己没有了主见,亏损就成了家常便饭。

【发人深省的投资名言】格雷厄姆:以近期的眼光看,股市是一个投票箱;以长远的眼光看,股市是一个天平。 彼得.林奇:投资成功的关键——耐力胜过头脑。巴菲特:当我和查理买下一种股票时,我们头脑中没有考虑出手的时间和价位。索罗斯:凡事总是盛极而衰,重要的是认清趋势转变,要点在找出转折点。

数据库管理系统(DBMS)中事务所具有的四个特性-ACID

2009年6月23日 admin 没有评论

在最近阅读一些可伸缩性原则的文章中经常会有根数据库事务的ACID做比较的情况,所以特此从维基百科上摘抄了相关内容以备日后查阅。

ACID,是指在数据库管理系统DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

  • 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
  • 隔离性:两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
  • 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

幻觉读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

隔离级别和允许的不一致读错误

隔离级别 脏读 不可重复读 幻读
读未提交
读已提交
可重复读
可串行化

参考资料

维基百科中关于ACID的解释

分类: 数据库 标签: , ,