is the free-software Prevalence layer for Java.
最早关注到prevayler是一年å?Šå‰?的事了。当时在网上éš?便乱转的时候,çª?然å?‘现有个å?«prevayler的东东获得了jolt 14届的大奖。好奇之余便跑到了主页上去看个究竟。乖乖,一看å?¯æ˜¯å?“了一跳,人家å?·ç§°æ¯”oracleå¿«9000å€?,比mysql还快3000å€?ï¼?牛皮å?¹ç ´å¤©äº†å?§ï¼Ÿç»†ç»†çœ‹æ?¥ï¼ŒåŽŸæ?¥äººå®¶ç‹¬è¾Ÿè¹Šå¾„,把数æ?®å…¨éƒ¨æ”¾åœ¨å†…å˜é‡Œï¼Œè€Œä¸”是以对象的形å¼?。在内å˜é‡Œé€Ÿåº¦å½“然应该更快,而以对象的方å¼?则使用起æ?¥æ›´è‡ªç„¶ã€‚
将数æ?®å…¨éƒ¨ä¿?å˜åœ¨å†…å˜é‡Œï¼Œå?¬èµ·æ?¥æœ‰ç‚¹ä¸?å?¯æ€?议,prevayler的价值观很简å?•ï¼ŒçŽ°åœ¨å†…å˜çš„ä»·æ ¼è¶Šæ?¥è¶Šä¾¿å®œï¼Œå¢žåŠ 内å˜çš„ä»£ä»·åŽŸæ¯”å¢žåŠ oracleçš„licenseè¦?便宜许多。在prevayler独特的高å?¯é? 性和高扩展性ä¿?è¯?下,原æ?¥è¶Šå?¸å¼•æˆ‘的眼ç?ƒï¼?当年最疯狂的技术å?£å?·ä¾¿æ˜¯ï¼šä½ 还在使用数æ?®åº“å?—?ï¼?
å…¬å?¸å¸Œæœ›èƒ½å¤Ÿæœ‰å¿«é€ŸåŽŸå½¢çš„å¼€å?‘能力,prevayler便å†?一次进入我的候选å??å?•ã€‚é‡?新下载prevayerçš„æº?代ç ?,æ¤æ—¶çš„版本已ç»?是2.0.006了,让它自带的例å?è·‘èµ·æ?¥è¿˜æ˜¯æ¯”较的容易,我就ä¸?在æ¤å” å?¨ã€‚ä¸?过,ç»?è¿‡å‡ ä¸ªä¾‹å?çš„å°?试,我å?‘现了一些容易让大家误解的概念ï¼?
首先:prevayler在通过æ¯?个Transaction把对象æŒ?久化的时候都是采用深度拷è´?çš„æ–¹å¼?,也就说å?³ä½¿æ˜¯å¤šå¯¹ä¸€çš„关系,例如book -> authorè¿™æ ·çš„å…³ç³»ï¼Œæ¯?个bookä¸éƒ½ä¼šä¿?å˜author完整的信æ?¯ï¼Œè€Œä¸?是引用ï¼?如果我们应用一下æ“?作getBookById(3).getAuthor().setAge(36)的到的结果居然是:
book[id:0, title:book1, author[id:0,name:foo,age:35]];
book[id:1, title:book1, author[id:0,name:foo,age:35]];
book[id:2, title:book1, author[id:0,name:foo,age:35]];
book[id:3, title:book1, author[id:0,name:foo,age:36]];
这个让我刚开始的时候ç?€å®žç–‘æƒ‘äº†ä¸€ä¼šã€‚è¿™æ ·çš„ç»“æžœå°±æ˜¯æˆ‘ä»¬ä¸?能在对象ä¸ä¿?ç•™å?¦ä¸€ä¸ªå¯¹è±¡çš„引用,而å?ªèƒ½ä¿?ç•™å?¦ä¸€ä¸ªå¯¹è±¡çš„id之类的引用。然å?Žé€šè¿‡æŸ¥è¯¢è¿™ä¸ªid获得需è¦?的对象。å?¦åˆ™ï¼Œæ•´ä¸ªç³»ç»Ÿçš„行为ç»?å¯¹å‡ºä¹Žä½ çš„æ„?æ–™ï¼?
其次,所有对æŒ?久化对象的æ“?作必须是在Transaction内完æˆ?,å?¦åˆ™æ— 效。这个和hibernate的概念比较接近。
prevayler系统并�是一个OODB,所以大家没有必�设计一个object的cantainer,然�把所有的数�都�久化在这个cantainer内。
Prevayler确实是一个大胆而å?ˆæœ‰åˆ›é€ 性的开æº?项目,虽然还ä¸?能说是尽善尽美,但是确实为我们æ??供了å?¦ä¸€ä¸ªæŒ?久化的选择。æ?®è¯´google所有的数æ?®éƒ½åœ¨å†…å˜ä¸æŸ¥è¯¢ï¼Œé‚£æˆ‘们利用Prevayler和它的cluster机制å?Žå?ˆèƒ½å?šäº›ä»€ä¹ˆå‘¢ï¼Ÿ