私は、AspectJを使用せずにSDN 2.1.0-RC4を使用して、ID、アクセス、および役割の管理に取り組んでいます。このシステムは約12万人のユーザーを管理することを目的としており、データはレガシーアプリケーションとHRアプリケーションから抽出されます。私は1日あたり500から30000の更新があるので、パフォーマンスは厄介な問題になる可能性があります。デフォルト構成でいくつかのワークベンチを実行しました。
私は非常に単純で愚かな方法を使用しました。簡単なクラス
@TypeAlias("event")
@NodeEntity
public class Event {
@GraphId
private Long graphId;
@Indexed
private Long eventId;
@RelatedTo(type="PREVIOUS_EVENT", direction=Direction.OUTGOING)
private Event previous;
private String description;
/.../
}
データを1つずつ挿入します
/.../
/**
*
*/
public void loadAllData() {
Event root = new Event();
root.setEventId(0L);
root.setDescription("ROOT");
repository.save(root);
Event curr = root;
for(int i = 0; i< SIZE; i ++) {
curr = insertData(curr, i );
}
}
/**
* @param curr
* @param i
* @return
*/
public Event insertData(Event curr, int i) {
long lastTime = System.currentTimeMillis();
Event evt = new Event();
evt.setEventId(curr.getEventId()+1);
evt.setPrevious(curr);
evt.setDescription("event #"+i);
repository.save(evt);
curr = evt;
delais[i] = System.currentTimeMillis() - lastTime;
return curr;
}
/.../
これらのメソッドをオーバーロードしていくつかテストします
1)@Transactionalの使用
@Override
@Transactional
public Event insertData(Event curr, int i) {
return super.insertData(curr, i);
}
2)neo4jトランザクションの使用
@Override
public void loadAllData() {
gds = getContext().getBean(GraphDatabaseService.class);
super.loadAllData();
}
@Override
public Event insertData(Event curr, int i) {
Transaction tx = gds.beginTx();
try {
curr = super.insertData(curr, i);
tx.success();
} catch(Exception e) {
tx.failure();
} finally {
tx.finish();
}
return curr;
}
私はベンチマークがトローリングの主題であることを知っています、そしてそれは私が望むものではありません。したがって、これらの値をそのまま使用します。愚かなテスト
結果
JtaTransactionManager
平均47,20ミリ秒、最小21,00ミリ秒、最大425,00ミリ秒
GraphDatabaseService
平均0.90ミリ秒、最小0.00ミリ秒、最大3,00ミリ秒
JtaTransactionManagerはネイティブneo4jサーバーに比べて非常に低速ですが、JtaTransactionManagerはグローバルで野心的なTransactionManagerです。
私の目的は、野心が少なく、スコープが小さいが、@ Transactionalアノテーションを使用してカスタムtransactionManagerを軽量化または作成する方法ですか?
私は何かを逃したかもしれませんか?
潜在的な助けやアドバイスをありがとう。
PS:私の構成
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:annotation-config/>
<context:spring-configured/>
<context:component-scan base-package="benchmark"/>
<neo4j:repositories base-package="benchmark.repository"/>
<neo4j:config graphDatabaseService="graphDatabaseService"/>
<bean id="graphDatabaseService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
destroy-method="shutdown">
<constructor-arg index="0" value="data/benchmark.db" />
</bean>
</beans>
Marc DeXeT