<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle Berkeley DB 中国研发团队的博客 &#187; Berkeley DB JE</title>
	<atom:link href="http://www.bdbchina.com/category/berkeley-db-je/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bdbchina.com</link>
	<description>Oracle Berkeley DB 中国研发团队的博客</description>
	<lastBuildDate>Fri, 09 Jul 2010 06:44:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>使用Oracle Berkeley DB实现空间数据库</title>
		<link>http://www.bdbchina.com/2010/07/%e4%bd%bf%e7%94%a8oracle-berkeley-db%e5%ae%9e%e7%8e%b0%e7%a9%ba%e9%97%b4%e6%95%b0%e6%8d%ae%e5%ba%93/</link>
		<comments>http://www.bdbchina.com/2010/07/%e4%bd%bf%e7%94%a8oracle-berkeley-db%e5%ae%9e%e7%8e%b0%e7%a9%ba%e9%97%b4%e6%95%b0%e6%8d%ae%e5%ba%93/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 02:10:18 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[JE]]></category>
		<category><![CDATA[spatial]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=1332</guid>
		<description><![CDATA[关于使用Oracle Berkeley DB作为空间数据库的引擎，可以参考如下资料：
* 使用基于Key/Value 接口的场合，可以考虑Berkeley DB C版本或者Berkeley DB Java 版的产品。可以参考美国University of Virginia的叫做PRIDE的学术论文：http://www.cs.virginia.edu/~stankovic/psfiles/pride.pdf
* 使用Oracle Berkeley DB SQL产品中的R*Tree功能，具体可以参考：http://www.bdbchina.com/2010/04/bdb11gr2的r-tree功能/
更多反馈，欢迎留言。
]]></description>
			<content:encoded><![CDATA[<p>关于使用Oracle Berkeley DB作为空间数据库的引擎，可以参考如下资料：</p>
<p>* 使用基于Key/Value 接口的场合，可以考虑Berkeley DB C版本或者Berkeley DB Java 版的产品。可以参考美国University of Virginia的叫做PRIDE的学术论文：<a href="http://www.cs.virginia.edu/~stankovic/psfiles/pride.pdf">http://www.cs.virginia.edu/~stankovic/psfiles/pride.pdf</a></p>
<p>* 使用Oracle Berkeley DB SQL产品中的R*Tree功能，具体可以参考：<a href="http://www.bdbchina.com/2010/04/bdb11gr2%E7%9A%84r-tree%E5%8A%9F%E8%83%BD/">http://www.bdbchina.com/2010/04/bdb11gr2的r-tree功能/</a></p>
<p>更多反馈，欢迎留言。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/07/%e4%bd%bf%e7%94%a8oracle-berkeley-db%e5%ae%9e%e7%8e%b0%e7%a9%ba%e9%97%b4%e6%95%b0%e6%8d%ae%e5%ba%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BDB-JE HA性能白皮书</title>
		<link>http://www.bdbchina.com/2010/07/bdb-je-ha%e6%80%a7%e8%83%bd%e7%99%bd%e7%9a%ae%e4%b9%a6/</link>
		<comments>http://www.bdbchina.com/2010/07/bdb-je-ha%e6%80%a7%e8%83%bd%e7%99%bd%e7%9a%ae%e4%b9%a6/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 01:43:07 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=1325</guid>
		<description><![CDATA[自从BDB-JE 4.0推出了高可用/集群的新特性，我们的工程师进一步做了关于在大型服务器上运行BDB-JE HA的性能测试。具体测试案例及结果数据可参考：http://www.oracle.com/technology/products/berkeley-db/pdf/BDB-JE-HighAvailability-WhitePaper-June2010.pdf。
这篇白皮书可以作为BDB-JE HA性能的参考，也可以作为测试选型BDB-JE HA的依据。需要注意的是， 性能数据依赖于很多因素的影响，我们的测试结果仅作参考。
同时，你可能发现附件中涉及到的关于GC和JVM参数的调整，对于性能的巨大影响。
希望能对您有用。更多反馈，欢迎留言。
]]></description>
			<content:encoded><![CDATA[<p>自从BDB-JE 4.0推出了高可用/集群的新特性，我们的工程师进一步做了关于在大型服务器上运行BDB-JE HA的性能测试。具体测试案例及结果数据可参考：http://www.oracle.com/technology/products/berkeley-db/pdf/BDB-JE-HighAvailability-WhitePaper-June2010.pdf。</p>
<p>这篇白皮书可以作为BDB-JE HA性能的参考，也可以作为测试选型BDB-JE HA的依据。需要注意的是， 性能数据依赖于很多因素的影响，我们的测试结果仅作参考。</p>
<p>同时，你可能发现附件中涉及到的关于GC和JVM参数的调整，对于性能的巨大影响。</p>
<p>希望能对您有用。更多反馈，欢迎留言。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/07/bdb-je-ha%e6%80%a7%e8%83%bd%e7%99%bd%e7%9a%ae%e4%b9%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Windows平台运行JE-HA示例</title>
		<link>http://www.bdbchina.com/2010/03/%e5%9c%a8windows%e5%b9%b3%e5%8f%b0%e8%bf%90%e8%a1%8cje-ha%e7%a4%ba%e4%be%8b/</link>
		<comments>http://www.bdbchina.com/2010/03/%e5%9c%a8windows%e5%b9%b3%e5%8f%b0%e8%bf%90%e8%a1%8cje-ha%e7%a4%ba%e4%be%8b/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 08:40:54 +0000</pubDate>
		<dc:creator>taozhang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Tao Zhang]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[HA]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=867</guid>
		<description><![CDATA[JE-HA是JE 4.0推出的一项新特性，本文介绍了JE-HA示例的基本功能和原理，并演示了如何在Windows平台上运行JE-HA的示例代码。]]></description>
			<content:encoded><![CDATA[<p>Oracle Berkeley DB Java Edition (简称JE)从4.0开始推出了高可用(又称集群、HA)功能，从而让用户能够更容易的编写高可靠的、7×24在线的应用程序。随版本一起还发布了很多HA的示例代码。本文的主要目的是示范如何在windows平台上运行这些示例，从而帮助用户更好的理解和使用HA。</p>
<h3>1.下载JE</h3>
<p>用户可以到官方网址<a href="http://www.oracle.com/technology/software/products/berkeley-db/je/index.html">http://www.oracle.com/technology/software/products/berkeley-db/je/index.html</a>下载最新的JE版本，本文使用的是JE 4.0.71. 同时，您也可以到<a href="http://www.oracle.com/technology/documentation/berkeley-db/je/examples/je/rep/quote/package-summary.html">http://www.oracle.com/technology/documentation/berkeley-db/je/examples/je/rep/quote/package-summary.html</a>参考示例的详细英文文档。</p>
<h3>2.编译示例</h3>
<p>请确认您在编译示例之前已经安装好JDK，如果您的机器上没有安装，请到<a href="http://java.sun.com">http://java.sun.com</a>下载JDK。</p>
<p>用户下载示例后，解压缩到当前目录，你会发现一个je-4.0.71的目录，进入该目录，您会在lib目录下发现JE的jar包，HA的示例代码存放在examples/je/rep/quote目录下。将lib下的je-4.0.71.jar拷贝到examples/je/rep/quote下，打开命令行，进入到当前目录，输入如下命令：javac -cp .;je-4.0.71.jar *.java，该目录下的所有java文件都会被编译成class文件。</p>
<h3>3.示例代码概述</h3>
<p>JE-HA的示例代码分为三种：</p>
<ul>
<li>StockQuotes：该示例代码是一个最基本的使用JE-HA应用程序的展示，其主要目的是让您对JE-HA的基本概念有一个了解，并演示了如何使用JE-HA的API创建一个ReplicatedEnvironment和处理读写事务。</li>
<li>RouterDrivenStockQuotes和HARouter：RouterDriverStockQuotes以StockQuotes为基础，展示了如何使用JE Monitor（HARouter）根据应用程序请求的类别（读或写）和结点的状态（Master或Replica），指引请求到正确的结点。该示例的目的是演示如何将负载平衡器与JE-HA结合起来，在该示例中，HARouter扮演负载平衡器的角色。</li>
<li>UpdateForwardingStockQuote和SimpleRouter：UpdateForwardingStockQuote以RouterDrivenStockQuotes为基础，与HARouter不同，SimpleRouter并不关心应用程序的请求类别和结点的状态，只是简单的将请求转发给它所知道的结点，而UpdateForwardingStockQuote使用了StateChangeListener来跟踪当前的Master结点，并将写请求转发给Master，自己处理读请求。这个示例的目的是演示如何将一个负载平衡器嵌入到JE-HA的框架中。</li>
</ul>
<p>本文主要演示如何运行前两个示例，第三个示例的运行方法与第二个基本类似，在这里就不做详细介绍了。<span id="more-867"></span></p>
<h3>4.创建运行环境</h3>
<p>为了演示的方便（截图的原因），我在同一台机器上运行三个HA结点。在开始运行示例代码之前，需要创建每个结点的environment home目录。这里，我在examples目录下创建三个目录，分别为：rep1，rep2，rep3。</p>
<p>因为JE-HA示例代码的包是je.rep.quote，所以命令行需要在examples目录下运行。</p>
<h3>5.运行StockQuotes示例</h3>
<p>(1).启动三个结点，如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-startup.jpg"><img class="aligncenter size-large wp-image-868" title="StockQuotes-startup" src="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-startup-1024x483.jpg" alt="" width="1024" height="483" /></a></p>
<p>(2).在Master上写数据，在Replica上读取数据，如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-writemaster-read-replica.jpg"><img class="aligncenter size-large wp-image-870" title="StockQuotes-writemaster-read-replica" src="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-writemaster-read-replica-1024x482.jpg" alt="" width="1024" height="482" /></a></p>
<p>（3). 如果在Replica上写数据。由于JE-HA只允许在Master上写数据，因此该操作是非法的，控制台会打印出提示信息，如下图红框内所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-writereplica.jpg"><img class="aligncenter size-large wp-image-871" title="StockQuotes-writereplica" src="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-writereplica-1024x484.jpg" alt="" width="1024" height="484" /></a></p>
<p>(4).将Master关闭，JE-HA会在当前集群中重新选举出一个新的Master，只有现存的Replica的数目符合选举策略，如下图红框内所示，node3被选举成为新的Master：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-changemaster.jpg"><img class="aligncenter size-large wp-image-872" title="StockQuotes-changemaster" src="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-changemaster-1024x483.jpg" alt="" width="1024" height="483" /></a></p>
<p>(5).将剩下的Replica也关掉，只剩下Master，这种情况下，应用程序还可以在Master上读取数据，但是已经不能写数据了。这是因为示例的默认事务提交策略是要得到超过半数的Replica的回应的，但是当前没有任何活跃的Replica，所以提交会失败并打印出异常信息。如下两图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-printmaster-replicadown.jpg"><img class="aligncenter size-large wp-image-873" title="StockQuotes-printmaster-replicadown" src="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-printmaster-replicadown-1024x483.jpg" alt="" width="1024" height="483" /></a></p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-writemaster-insufficentreplica1.jpg"><img class="aligncenter size-large wp-image-874" title="StockQuotes-writemaster-insufficentreplica" src="http://www.bdbchina.com/wp-content/uploads/2010/03/StockQuotes-writemaster-insufficentreplica1-1024x483.jpg" alt="" width="1024" height="483" /></a></p>
<h3>6.运行RouterDrivenStockQuotes和HARouter示例</h3>
<p>运行RouterDrivenStockQuotes和HARouter示例与运行StockQuotes示例基本类似，唯一的不同是需要在启动三个RouterDrivenStockQuotes之外再启动一个HARouter。</p>
<p>(1).启动整个HA组，如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-startup.jpg"><img class="aligncenter size-large wp-image-879" title="RouterDriven-startup" src="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-startup-1024x585.jpg" alt="" width="1024" height="585" /></a></p>
<p>(2).HARouter指引写请求到Master，如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-write.jpg"><img class="aligncenter size-large wp-image-880" title="RouterDriven-write" src="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-write-1024x584.jpg" alt="" width="1024" height="584" /></a></p>
<p>(3).HARouter将读请求指引到目前空闲的结点，如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-print.jpg"><img class="aligncenter size-large wp-image-877" title="RouterDriven-print" src="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-print-1024x584.jpg" alt="" width="1024" height="584" /></a></p>
<p>(4).关闭当前的Master，HARouter会自动找到新选出来的Master，如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-shutdown-master.jpg"><img class="aligncenter size-large wp-image-878" title="RouterDriven-shutdown-master" src="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-shutdown-master-1024x582.jpg" alt="" width="1024" height="582" /></a></p>
<p>(5).当所有Replica都关闭，只剩下Master还活跃的时候，HARouter会提示写请求是非法的（原因在StockQuotes演示第六步已经介绍了），如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-insufficentreplicas-write.jpg"><img class="aligncenter size-large wp-image-875" title="RouterDriven-insufficentreplicas-write" src="http://www.bdbchina.com/wp-content/uploads/2010/03/RouterDriven-insufficentreplicas-write-1024x583.jpg" alt="" width="1024" height="583" /></a></p>
<h3>7.总结</h3>
<p>JE-HA是对JE功能的一个巨大提升。希望本文能够让你更好的了解并使用JE-HA。如果您对本文有什么意见或对JE-HA有什么建议，请您站内留言。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/03/%e5%9c%a8windows%e5%b9%b3%e5%8f%b0%e8%bf%90%e8%a1%8cje-ha%e7%a4%ba%e4%be%8b/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BDB Java Edition + prefuse, 轻松实现数据可视化</title>
		<link>http://www.bdbchina.com/2010/03/bdb-java-edition-prefuse-%e8%bd%bb%e6%9d%be%e5%ae%9e%e7%8e%b0%e6%95%b0%e6%8d%ae%e5%8f%af%e8%a7%86%e5%8c%96/</link>
		<comments>http://www.bdbchina.com/2010/03/bdb-java-edition-prefuse-%e8%bd%bb%e6%9d%be%e5%ae%9e%e7%8e%b0%e6%95%b0%e6%8d%ae%e5%8f%af%e8%a7%86%e5%8c%96/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 11:04:39 +0000</pubDate>
		<dc:creator>haomianwang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Haomian Wang]]></category>
		<category><![CDATA[bdb]]></category>
		<category><![CDATA[JE]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=784</guid>
		<description><![CDATA[数据可视化概述
这些年来，随着大量数据的产生，数据可视化（data visualization）广泛应用于科研、军事、金融、医疗等等领域。我们的生活也到处可见数据可视化的例子。比如，股票软件上显示的K线图，调查结果的柱状图、曲线图，人口分布的密度图等等等等。
那么，什么是数据可视化呢？根据维基百科的解释：Data visualization is the study of the visual representation of data, meaning &#8220;information which has been abstracted in some schematic form, including attributes or variables for the units of information&#8221;。简单来说，数据可视化就是用更加直观更加生动易懂的图形图像表现某种特定的数据集合。
这篇文章将简单介绍如何轻松利用BDB Java Edition （JE）和prefuse实现自己的数据可视化应用。
可视化工具和数据库的选择
首先我们选择prefuse作为数据可视化工具。prefuse是一个轻量级的用于可视化任意数据集（visualize the data）的java类库，它提供了多种数据可视化模式，比如柱状图、树图、饼图等等。它的优点是简单易用、可视化功能齐全。
但仅仅有可视化工具是不够的，还需要什么呢？当然还必须有存储数据的数据库。可以打个比方，数据是一栋房子，数据可视化就是我们要给房子做装修，让它更好看，那么数据库就是地基。没有地基，何来房子，更不用说装修了。那么，我们选择什么样的数据库呢。既然prefuse是java类库，而我们JE的特点是纯Java实现，性能高，footprint小等等，那么，JE绝对是一个很好的选择。
好了，现在就让我们看看JE + prefuse的威力吧。
数据集属性的定义
首先，我们选择需要做可视化的数据集。在这里，我给出的例子是可视化某个公司的员工数据，包括他们的基本属性，上下级关系和各自所参与的任务。
1. 员工（Employee）的属性
@Entity
public class Employee {
    @PrimaryKey
    int employeeId;

    @SecondaryKey(relate [...]]]></description>
			<content:encoded><![CDATA[<h2>数据可视化概述</h2>
<p>这些年来，随着大量数据的产生，数据可视化（data visualization）广泛应用于科研、军事、金融、医疗等等领域。我们的生活也到处可见数据可视化的例子。比如，股票软件上显示的K线图，调查结果的柱状图、曲线图，人口分布的密度图等等等等。</p>
<p>那么，什么是数据可视化呢？根据维基百科的解释：<strong>Data visualization</strong> is the study of the visual representation of data, meaning &#8220;information which has been abstracted in some schematic form, including attributes or variables for the units of information&#8221;。简单来说，数据可视化就是用更加直观更加生动易懂的图形图像表现某种特定的数据集合。</p>
<p>这篇文章将简单介绍如何轻松利用BDB Java Edition （JE）和<a href="http://prefuse.org/">prefuse</a>实现自己的数据可视化应用。</p>
<h2>可视化工具和数据库的选择</h2>
<p>首先我们选择prefuse作为数据可视化工具。prefuse是一个轻量级的用于可视化任意数据集（visualize the data）的java类库，它提供了多种数据可视化模式，比如柱状图、树图、饼图等等。它的优点是简单易用、可视化功能齐全。</p>
<p>但仅仅有可视化工具是不够的，还需要什么呢？当然还必须有存储数据的数据库。可以打个比方，数据是一栋房子，数据可视化就是我们要给房子做装修，让它更好看，那么数据库就是地基。没有地基，何来房子，更不用说装修了。那么，我们选择什么样的数据库呢。既然prefuse是java类库，而我们JE的特点是纯Java实现，性能高，footprint小等等，那么，JE绝对是一个很好的选择。</p>
<p>好了，现在就让我们看看JE + prefuse的威力吧。<span id="more-784"></span></p>
<h2>数据集属性的定义</h2>
<p>首先，我们选择需要做可视化的数据集。在这里，我给出的例子是可视化某个公司的员工数据，包括他们的基本属性，上下级关系和各自所参与的任务。</p>
<p><strong>1. 员工（Employee）的属性</strong></p>
<pre class="java:nogutter">@Entity
public class Employee {
    @PrimaryKey
    int employeeId;

    @SecondaryKey(relate = MANY_TO_ONE)
    String employeeName;

    @SecondaryKey(relate = MANY_TO_ONE)
    float salary;

    @SecondaryKey(relate = MANY_TO_ONE, relatedEntity=Employee.class,
                 onRelatedEntityDelete=NULLIFY)
    int managerId;

    @SecondaryKey(relate = MANY_TO_ONE, relatedEntity=Department.class,
                 onRelatedEntityDelete=NULLIFY)
    int departmentId;

    @SecondaryKey (relate =MANY_TO_MANY, relatedEntity=ServiceRequest.class,
                 onRelatedEntityDelete=NULLIFY)
    Set&lt;Integer&gt; SRIds = new HashSet&lt;Integer&gt;();

    String address;
    String email;
    String phone;

    /* setter and getter functions. */
}</pre>
<p><strong>2. 部门（Department）的属性</strong></p>
<pre class="java:nogutter">@Entity
class Department {
    @PrimaryKey
    int departmentId;

    @SecondaryKey(relate = ONE_TO_ONE)
    String departmentName;

    String location;

    /* setter and getter functions. */
}</pre>
<p><strong>3. 任务（ServiceRequest）的属性</strong></p>
<pre class="java:nogutter">@Entity
class ServiceRequest {
	@PrimaryKey
	int SRId;

	String title;
	String content;

/* setter and getter functions. */
}</pre>
<h2>数据可视化效果</h2>
<p>我们选择两种可视化方式：弧形树（radial tree）和节点树（node link tree）。下面看看我们的可视化效果。</p>
<p>利用radial tree来显示整个公司的结构（organization chart)：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/snapshot1.png"><img class="aligncenter size-large wp-image-835" title="snapshot" src="http://www.bdbchina.com/wp-content/uploads/2010/03/snapshot1-1024x628.png" alt="" width="839" height="514" /></a></p>
<p>上图左边最大的窗口显示的是整个公司的结构图。从图中可以看出公司有四个部门。每一个有颜色小节点代表一名员工，不同部门的员工具有不同的颜色。节点之间的连线表示上下级关系。上图右上角的小窗口显示的是选中的员工的具体信息。右下角的小窗口显示的是JE database 的schema图。从中可以看出我们定义了三个Entity: Employee, Department以及Service Request.</p>
<p>点击任意一个员工节点，将可以显示此员工的上下级结构图，也就是在此公司与之有关系的所有员工的结构图。比如我们点击名字叫Goodstein A. Chavez 的员工，结果如下图所示：</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/snapshot2.png"><img class="aligncenter size-full wp-image-836" title="snapshot2" src="http://www.bdbchina.com/wp-content/uploads/2010/03/snapshot2.png" alt="" width="528" height="402" /></a></p>
<p>从上图可以看出，此员工有四名直接下属，而他的老板直接向公司的CEO汇报。</p>
<p>除了可以直接点击员工节点（基于员工ID）进行查询，我们还可以通过部门ID（Department ID）经理ID（Manager ID）和具体的任务ID（SR ID）和员工姓名来对员工进行查询。下面是对部门ID和任务ID查询的结果截图。</p>
<p>部门2的员工结构图（DeparmentID = 2）</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/byDepartment.png"><img class="aligncenter size-large wp-image-842" title="byDepartment" src="http://www.bdbchina.com/wp-content/uploads/2010/03/byDepartment-1024x261.png" alt="" width="805" height="205" /></a></p>
<p>部门2中，参与了任务3的员工（DeparmentID = 2 and SRId = 3）</p>
<p><a href="http://www.bdbchina.com/wp-content/uploads/2010/03/bySR.png"><img class="aligncenter size-large wp-image-843" title="bySR" src="http://www.bdbchina.com/wp-content/uploads/2010/03/bySR-1024x265.png" alt="" width="803" height="208" /></a></p>
<p>值得一提的是，所有这些关系的查询都可以利用在JE里面定义的Entity之间的关系（relation），而不需要我们做额外的查询工作，比如想通过经理ID来查询此经理的直接下属，一句代码便可以实现：</p>
<p>dao.employeeByManagerId.subIndex(Integer.valueOf(searchKey)).entities();</p>
<h2>JE+prefuse的优势总结</h2>
<ol>
<li><strong>简单易用</strong>：用过JE的朋友都知道，利用JE（特别是JE DPL）能够十分轻松、灵活定义各种数据集模型，其get/put操作也特别简单，而且能够很容易写出特定的查询语句。而prefuse也提供了功能齐全的可视化API。所以，利用JE做数据的存取操作，利用prefuse做数据的可视化操作，其对接是十分直接和简便的。</li>
<li><strong>Footprint小</strong>：拿上面所举的员工数据可视化应用例子来说，整个应用程序打成可直接运行的jar文件才1.87M，但功能却很齐全（多种可视化效果，多种查询方式）。这样大小的程序，即使安装在一般的移动设备（比如手机）上运行都绰绰有余。</li>
<li><strong>性能高：</strong>数据可视化的性能主要体现在做查询和可视化的速度。还是以员工数据可视化为例，插入员工数据有1000条，存储到JE 数据库的大小是729k。之后用户对节点的点击和在输入框的查询，其可视化结果都能迅速得以显示（笔者没有做过具体的时间记录，但相信所需时间都是毫秒级的）。</li>
</ol>
<h2>结束语</h2>
<p>从这个例子我们可以看出在数据可视化方面，利用JE作为存储引擎是一个很好的选择。有兴趣的朋友不妨一试。另外，这里有一个十分有趣例子，是利用JE和Google Visualization API来可视化一栋房子的用电情况（ electric usage of Hypatia House），感兴趣的朋友请参考以下链接：<a href="http://excitedcuriosity.wordpress.com/2010/02/22/its-electric-ted-data-storage-and-plotting/">http://excitedcuriosity.wordpress.com/2010/02/22/its-electric-ted-data-storage-and-plotting/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/03/bdb-java-edition-prefuse-%e8%bd%bb%e6%9d%be%e5%ae%9e%e7%8e%b0%e6%95%b0%e6%8d%ae%e5%8f%af%e8%a7%86%e5%8c%96/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Berkeley DB Java Edition Resources</title>
		<link>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-resources/</link>
		<comments>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-resources/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 11:09:49 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[David Zhao]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=804</guid>
		<description><![CDATA[Resources

The Berkeley DB Java Edition FAQ  has useful tips and should be a first stop when trouble shooting problems.
You can find product information, datasheets, and whitepapers on  the JE home page on OTN.
All JE release images are on the JE download page.
The JE documentation page has Javadoc, Getting Started Guides and tutorials.
Here is [...]]]></description>
			<content:encoded><![CDATA[<h4>Resources</h4>
<ul>
<li>The <a href="http://www.oracle.com/technology/products/berkeley-db/faq/je_faq.html">Berkeley DB Java Edition FAQ </a> has useful tips and should be a first stop when trouble shooting problems.</li>
<li>You can find product information, datasheets, and whitepapers on <a href="http://www.oracle.com/technology/products/berkeley-db/je/index.html"> the JE home page on OTN.</a></li>
<li>All JE release images are on <a href="http://www.oracle.com/technology/software/products/berkeley-db/je/index.html">the JE download page.</a></li>
<li>The <a href="http://www.oracle.com/technology/documentation/berkeley-db/je/index.html">JE documentation page</a> has Javadoc, Getting Started Guides and tutorials.</li>
<li>Here is the <a href="http://www.oracle.com/technology/software/products/berkeley-db/htdocs/jeoslicense.html">JE License</a>.</li>
<li>Charles Lamb, a JE developer, <a href="http://blogs.oracle.com/charleslamb"> blogs</a> about usage tips, announcements, and developer anecdotes.</li>
<li>There&#8217;s a whitepaper called <a href="http://www.oracle.com/technology/products/berkeley-db/pdf/performing%20queries%20in%20oracle%20berkeley%20db%20java%20edition.pdf">Performing Queries in Oracle Berkeley DB Java Edition.</a> The whitepaper takes common SQL queries and shows how to execute the same logic using the Direct Persistence Layer (DPL). The goal is to give users who are familiar with SQL some help in learning how to use the DPL.</li>
<li>Chinese language JE blogs are available at www.bdbchina.com</li>
<li>Application source code examples are included as part of the Berkeley DB JE distribution in the examples directory.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Berkeley DB Java Edition Android/Google Maps Demo</title>
		<link>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-androidgoogle-maps-demo/</link>
		<comments>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-androidgoogle-maps-demo/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 11:06:03 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=801</guid>
		<description><![CDATA[Thanks to Chris Eastland at Nebula Software Systems for the screen shot of this cool Google Maps/Android app built on BDB JE. The location data is stored in a JE database running on the device.
See the details at Charles Lamb&#8217;s blog at              [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to Chris Eastland at Nebula Software Systems for the screen shot of this cool Google Maps/Android app built on BDB JE. The location data is stored in a JE database running on the device.</p>
<p>See the details at Charles Lamb&#8217;s blog at                                         <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fblogs%2Eoracle%2Ecom%2FcharlesLamb%2F2010%2F02%2Fberkeley_db_java_edition_andro%2Ehtml&amp;urlhash=gH3q" target="_blank">http://blogs.oracle.com/charlesLamb/2010/02/berkeley_db_java_edition_andro.html</a> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-androidgoogle-maps-demo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Berkeley DB Java Edition/Android Whitepaper</title>
		<link>http://www.bdbchina.com/2010/02/berkeley-db-java-editionandroid-whitepaper/</link>
		<comments>http://www.bdbchina.com/2010/02/berkeley-db-java-editionandroid-whitepaper/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 11:04:26 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=799</guid>
		<description><![CDATA[Charles Lamb (BDB-JE 架构师) 最近发表的一篇关于在Google Android运行Berkeley DB Java Edition的白皮书。书中简要描述了JE在在Android平台上运行的一些优势和特点，诸如性能，可扩展性，索引，并发控制，事务和多对多的 事物-线程映射模型。
原文地址： http://www.oracle.com/technology/products/berkeley-db/pdf/bdb-je-android.pdf .
]]></description>
			<content:encoded><![CDATA[<p>Charles Lamb (BDB-JE 架构师) 最近发表的一篇关于在Google Android运行Berkeley DB Java Edition的白皮书。书中简要描述了JE在在Android平台上运行的一些优势和特点，诸如性能，可扩展性，索引，并发控制，事务和多对多的 事物-线程映射模型。</p>
<p>原文地址： <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fwww%2Eoracle%2Ecom%2Ftechnology%2Fproducts%2Fberkeley-db%2Fpdf%2Fbdb-je-android%2Epdf&amp;urlhash=zko9" target="_blank">http://www.oracle.com/technology/products/berkeley-db/pdf/bdb-je-android.pdf</a> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/02/berkeley-db-java-editionandroid-whitepaper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Berkeley DB Java Edition: Handling Transactions in JE 4.0</title>
		<link>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-handling-transactions-in-je-4-0/</link>
		<comments>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-handling-transactions-in-je-4-0/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:56:02 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/2010/02/berkeley-db-java-edition-handling-transactions-in-je-4-0/</guid>
		<description><![CDATA[In his blog (                                        http://blogs.sun.com/jhalex/entry/handling_transactions_in_bdb_je ), Jeff Alexander of Sun&#8217;s project Aura describes how they&#8217;ve standardized [...]]]></description>
			<content:encoded><![CDATA[<p>In his blog (                                        <a title="New window will open" href="http://www.linkedin.com/redirect?url=http%3A%2F%2Fblogs%2Esun%2Ecom%2Fjhalex%2Fentry%2Fhandling_transactions_in_bdb_je&amp;urlhash=UpNv" target="_blank">http://blogs.sun.com/jhalex/entry/handling_transactions_in_bdb_je</a> ), Jeff Alexander of Sun&#8217;s project Aura describes how they&#8217;ve standardized on a calling convention for JE which provides uniform, yet flexible, transaction and exception handling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/02/berkeley-db-java-edition-handling-transactions-in-je-4-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在JSP中使用Berkeley DB Java Edition</title>
		<link>http://www.bdbchina.com/2010/02/%e5%9c%a8jsp%e4%b8%ad%e4%bd%bf%e7%94%a8berkeley-db-java-edition/</link>
		<comments>http://www.bdbchina.com/2010/02/%e5%9c%a8jsp%e4%b8%ad%e4%bd%bf%e7%94%a8berkeley-db-java-edition/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:49:31 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Chao Huang]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=793</guid>
		<description><![CDATA[有来自开源社区的BDB-JE用户写的一篇博客，介绍了如何在JSP中使用JE来存取Java对象。英文好的朋友或者项目中有类似需求的朋友，不妨看看。原文地址为：http://reecegriffin.com/blog/berkeleyje.html。
在这篇博客中，作者简要提到了最新的JE 4.0 发布的新特性 &#8211; Replication。简言之就是支持高可用或集群功能，并提供了软件和硬件层面的负载均衡。个人认为，JE 4.0的高可用功能绝对是任务密集型的、要求7×24小时高可用的J2EE应用项目中的利器啊。  
最后，欢迎留言。
]]></description>
			<content:encoded><![CDATA[<p>有来自开源社区的BDB-JE用户写的一篇博客，介绍了如何在JSP中使用JE来存取Java对象。英文好的朋友或者项目中有类似需求的朋友，不妨看看。原文地址为：http://reecegriffin.com/blog/berkeleyje.html。</p>
<p>在这篇博客中，作者简要提到了最新的JE 4.0 发布的新特性 &#8211; Replication。简言之就是支持高可用或集群功能，并提供了软件和硬件层面的负载均衡。个人认为，JE 4.0的高可用功能绝对是任务密集型的、要求7×24小时高可用的J2EE应用项目中的利器啊。 <img src='http://www.bdbchina.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>最后，欢迎留言。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/02/%e5%9c%a8jsp%e4%b8%ad%e4%bd%bf%e7%94%a8berkeley-db-java-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>欢迎加入Berkeley DB群@LinkedIn</title>
		<link>http://www.bdbchina.com/2010/02/%e6%ac%a2%e8%bf%8e%e5%8a%a0%e5%85%a5berkeley-db%e7%be%a4linkedin/</link>
		<comments>http://www.bdbchina.com/2010/02/%e6%ac%a2%e8%bf%8e%e5%8a%a0%e5%85%a5berkeley-db%e7%be%a4linkedin/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:19:01 +0000</pubDate>
		<dc:creator>chaohuang</dc:creator>
				<category><![CDATA[Berkeley DB]]></category>
		<category><![CDATA[Berkeley DB JE]]></category>
		<category><![CDATA[Berkeley DB XML]]></category>
		<category><![CDATA[Chao Huang]]></category>
		<category><![CDATA[bdb]]></category>

		<guid isPermaLink="false">http://www.bdbchina.com/?p=791</guid>
		<description><![CDATA[首先祝各位访客新年快乐，虎年富贵吉祥！
Oracle Berkeley DB在LinkedIn.com上的新建了一个群，供全球的相关人士（包括工程师、产品经理、客户等）共同讨论Berkeley DB的话题和业界动态。群地址：http://www.linkedin.com/groups?gid=2131985. 欢迎加入！
Oracle Berkeley DB 中国研发团队
]]></description>
			<content:encoded><![CDATA[<p>首先祝各位访客新年快乐，虎年富贵吉祥！</p>
<p>Oracle Berkeley DB在LinkedIn.com上的新建了一个群，供全球的相关人士（包括工程师、产品经理、客户等）共同讨论Berkeley DB的话题和业界动态。群地址：<a href="http://www.linkedin.com/groups?gid=2131985">http://www.linkedin.com/groups?gid=2131985</a>. 欢迎加入！</p>
<p>Oracle Berkeley DB 中国研发团队</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdbchina.com/2010/02/%e6%ac%a2%e8%bf%8e%e5%8a%a0%e5%85%a5berkeley-db%e7%be%a4linkedin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
Դ