Bagriã䜿çšããæå³ãããã®ã¯ãã€ã§ãã
ã¯ãŒã¯ãããŒãXMLã«åºã¥ããŠããå ŽåããŸãæåã«ã·ã¹ãã ã䜿çšããããšããå§ãããŸãã ãããã¯éèãç©æµãä¿éºãå»çããã®ä»ã®æ¥çã§ãããåå è éã§äº€æãããããã¥ã¡ã³ãã®åœ¢åŒã¯äŒæ¥ã®XSDã¹ããŒã ã«ãã£ãŠå³å¯ã«å®çŸ©ãããŠããŸãã ãã®ã·ã¹ãã ã§ã¯ããã¹ãŠã®åä¿¡ããã¥ã¡ã³ãã解æããã®ã§ã¯ãªããããŒã¿ããŒã¹ã«ãã®ãŸãŸä¿åãã匷åãªXQuery 3.1ããŒã«ãããã䜿çšããŠãä¿åãããããã¥ã¡ã³ãã«å¯ŸããŠå¹æçã«ã¯ãšãªãå®è¡ã§ããŸãã
Bagriã¯ãHazelcastãCoherenceãInfinispanãªã©ã®åæ£ãã£ãã·ã¥è£œåã®äžã«æ§ç¯ãããŠããŸãã Bagriãããã«äŒæ¥éšéã®èŠä»¶ããµããŒãããã®ã¯ãåæ£ãã£ãã·ã¥æ©èœã®ããã§ãã åæ£ãã£ãã·ã¥ã¯ãããŒã¿ãŠã§ã¢ããŠã¹ãšããŠã ãã§ãªãããã®ããŒã¿ã®åæ£åŠçã·ã¹ãã ãšããŠã䜿çšãããŸããããã«ããã倧éã®ãããæ§é åãããããŒã¿ãå¹ççãã€è¿ éã«åŠçã§ããŸãã ã·ã¹ãã å ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯ã ãã«ãããŒãžã§ã³åæå®è¡å¶åŸ¡ãå®è£ ããã¢ã«ãŽãªãºã ã䜿çšããŠè§£æ±ºãããŸã
ããŒã¿ã¯ãXMLãŸãã¯JSONããã¥ã¡ã³ããšããŠã·ã¹ãã ã«é ä¿¡ãããŸãã Bagriã«æ¡åŒµæ©èœãå®è£ ããæ°ããããã¥ã¡ã³ã圢åŒãå€éšããã¥ã¡ã³ãã¹ãã¬ãŒãžã·ã¹ãã ã§äœæ¥ããããã®ãã©ã°ã€ã³ãç»é²ããæ©äŒããããŸãã è£å©bagri-extensionsãããžã§ã¯ãã«ã¯ãããŒã ãéçºããæ¡åŒµæ©èœãå«ãŸããŠããŸãïŒMongoDBãžã®ã³ãã¯ã¿ã¯çŸåšå®è£ ãããŠããŸãïŒã
XQueryã¯ã¯ãšãªèšèªãšããŠäœ¿çšãããŸãããå°æ¥çã«ã¯SQLæ§æããµããŒãããäºå®ã§ãããã®ã¿ã¹ã¯ã¯ãããžã§ã¯ãgithubã§å©çšã§ããŸãã
Bagriã¯ããŒã¿ã¹ããŒã ã®äºåç¥èãå¿ èŠãšããŸããããçä¿¡ããã¥ã¡ã³ãã®è§£æäžã«ããŒã¿ã®èŸæžïŒããã¥ã¡ã³ãæ§é å ã®äžæã®ãã¹ïŒãããªã³ã¶ãã©ã€ãã§äœæããŸãã T.O. Bagriã¯å®å šã«ã¹ããŒãã¬ã¹ã§ãããæ°ããã¿ã€ãã®ããã¥ã¡ã³ãã®ããã«ããŒãã«ãåæ§ç¯ããå¿ èŠã¯ãããŸããã ååãšããŠãããŒãã«ã®äœæ/åã®è¿œå ã³ãã³ãã¯å¿ èŠãããŸããã
ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®éä¿¡çšã«ãBagriã¯2ã€ã®APIãæäŸããŸããJSR225ã§å®£èšãããæšæºXQJ APIãšãXQJã§ã¯å©çšã§ããªãè¿œå æ©èœãæäŸããç¬èªã®XDM APIã§ãã å®éãXQJã€ã³ã¿ãŒãã§ãŒã¹ã¯ããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ãæäœãããšãã«JDBCãã©ã€ããŒã«ãã£ãŠæäŸãããæ©èœã«é¡äŒŒããŠããŸãã XQJãã©ã€ããŒãšäžç·ã«ãå ¬åŒã®XQJ TCKãã·ã¹ãã ã«ä»å±ããŠããŸãããããå®è¡ããŠããã©ã€ããŒããã¹ãŠã®XQJãã¹ãã«100ïŒ åæ Œããããšã確èªã§ããŸãã
Bagriã§ã®åæ£ãã£ãã·ã¥æ©èœã®äœ¿çšæ¹æ³
Bagriã®ãã¹ãŠã®ããã¥ã¡ã³ãã¯ã¹ããŒã ã«ä¿åãããŸãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ïŒRDBMSïŒã§æãè¿ããã®ã¯ããŒã¿ããŒã¹ã§ãã çŸåšã Hazelcastã¯ã·ã¹ãã ãæ§ç¯ãããåæ£ãã£ãã·ã¥ãšããŠäœ¿çšãããåã¹ããŒã ã«åå¥ã®Hazelcastã¯ã©ã¹ã¿ãŒãå²ãåœãŠãããŠããŸãã ã¹ããŒã ã¯äºãã«ç¬ç«ããŠååšããŸãã ã¹ããŒã éã§ãªãœãŒã¹ã«ãéäºãã¯ãããŸããïŒHazelcastã§ã¯ãåã¯ã©ã¹ã¿ãŒã¯åå¥ã«æ§æãããç¬èªã®ãªãœãŒã¹ããŒã«ãæã£ãŠããŸãïŒã
ããã¥ã¡ã³ãã¡ã¿ããŒã¿ïŒåå空éãããã¥ã¡ã³ãã¿ã€ããäžæã®ãã¹ïŒã¯é©åãªãã£ãã·ã¥ã«æ ŒçŽãããã¯ã©ã¹ã¿ãŒã®ãã¹ãŠã®ããŒãéã§è€è£œãããŸãã T.O. äœæ¥ããŒãäžã®ã¡ã¿ããŒã¿ãèªã¿åãããã®ã¢ã¯ã»ã¹ã¯å¯èœãªéãé«éã§ãã ããã¥ã¡ã³ãèªäœã®ããŒã¿ã¯ã¡ã¿ããŒã¿ããåé¢ãããåæ£ãã£ãã·ã¥ã«ä¿åãããŸããã1ã€ã®ããã¥ã¡ã³ãã«é¢é£ããããŒã¿ã¯åžžã«åãããŒãã«ä¿åãããŸãã ãŸããã€ã³ããã¯ã¹ä»ãã®å€ãä¿åãããã£ãã·ã¥ãã³ã³ãã€ã«ãããã¯ãšãªããã©ã³ã¶ã¯ã·ã§ã³ãã°ãããã³ãã¡ããå®è¡ãããã¯ãšãªã®çµæçšã®ãã£ãã·ã¥ããããŸãã
Bagriã¯ã©ã€ã¢ã³ãã¯ãã¯ã©ã€ã¢ã³ããã£ãã·ã¥ãœãããŠã§ã¢ã®å éšã¡ã«ããºã ã䜿çšããŠãµãŒããŒã«æ¥ç¶ããŸãã XQueryã¯ã©ã€ã¢ã³ãèŠæ±ã¯ãžã§ãã«ããã±ãŒãžåãããHazelcastãã©ãããã©ãŒã ãæäŸããåæ£ExecutorServiceãä»ããŠãµãŒããŒããŒãã§å®è¡ãããŸãã
çµæã¯ãå°çšã®éåæãã£ãã«ïŒHazelcastãã¥ãŒïŒãä»ããŠã¯ã©ã€ã¢ã³ãã«è¿ãããŸã
ã·ã¹ãã æ§æ
ã·ã¹ãã æ§æå šäœã¯ãããŒã«ãšãŠãŒã¶ãŒãèšå®ããaccess.xmlãããã³Bagriã¹ããŒã ãšæ¡åŒµæ©èœã®èšå®ãå«ãconfig.xmlã®2ã€ã®ãã¡ã€ã«ã«ä¿åãããŸãã ãããã®ãã¡ã€ã«ã®åœ¢åŒãšãããã§äœ¿çšããããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã®è©³çŽ°ãªèª¬æã¯ãã·ã¹ãã ã®ã€ã³ã¹ããŒã«ããã³æ§æã®æ瀺ã«èšèŒãããŠããŸã ã ã¹ããŒãèšå®ã¯ããã¡ã€ã«ã§çŽæ¥å€æŽããããBagri管çãµãŒããŒã«ãããã€ãããã¹ããŒãã管çããããã®JMXã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠå€æŽã§ããŸãã
ããŒã¿ã®äŸ
çè«ããå®è·µã«ç§»ããJavaã³ãŒãããXQJã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠBagriãæäœããæ¹æ³ãèŠãŠã¿ãŸãããã
springã³ã³ããã¹ãå ã§ãBagriXQDataSourceãã³ã宣èšãããã®4ã€ã®äž»èŠãã©ã¡ãŒã¿ãŒïŒãªã¢ãŒããµãŒããŒã¢ãã¬ã¹ãã¹ããŒã åããŠãŒã¶ãŒåããã¹ã¯ãŒãïŒãæ§æããŸãã
<bean id="xqDataSource" class="com.bagri.xqj.BagriXQDataSource"> <property name="properties"> <props> <prop key="address">${schema.address}</prop> <prop key="schema">${schema.name}</prop> <prop key="user">${schema.user}</prop> <prop key="password">${schema.password}</prop> </props> </property> </bean> <bean id="xqConnection" factory-bean="xqDataSource" factory-method="getConnectionâ/>
XQJæ¥ç¶ãååŸããŸãã
context = new ClassPathXmlApplicationContext("spring/xqj-client-context.xml"); XQConnection xqc = context.getBean(XQConnection.class);
次ã«ãããã¹ããã¡ã€ã«ãèªã¿åããããã«åºã¥ããŠBagriã«æ°ããããã¥ã¡ã³ããäœæããŸãã
String content = readTextFile(fileName); String query = "declare namespace bgdm=\"http://bagridb.com/bagri-xdm\";\n" + "declare variable $uri external;\n" + "declare variable $content external;\n" + "declare variable $props external;\n" + "let $id := bgdm:store-document($uri, $content, $props)\n" + "return $id\n"; XQPreparedExpression xqpe = xqc.prepareExpression(query); xqpe.bindString(new QName("uri"), fileName, xqc.createAtomicType(XQBASETYPE_ANYURI)); xqpe.bindString(new QName("content"), content, xqc.createAtomicType(XQBASETYPE_STRING)); List<String> props = new ArrayList<>(2); props.add(âxdm.document.data.format=xml"); //can be âjsonâ or something else.. xqpe.bindSequence(new QName("props"), xqConn.createSequence(props.iterator())); XQSequence xqs = xqpe.executeQuery(); xqs.next(); long id = xqs.getLong();
äžèšã®ãªã¯ãšã¹ãã¯ãbgdmåå空éã§å®çŸ©ãããå€éšã¹ãã¢ããã¥ã¡ã³ãé¢æ°ãåŒã³åºããŸãã ãã®é¢æ°ã¯ãå ¥åãšããŠ3ã€ã®ãã©ã¡ãŒã¿ãŒãåãå ¥ããŸããuriã¯ãããã¥ã¡ã³ããä¿åãããå Žæãããã¥ã¡ã³ãã®ããã¹ãã³ã³ãã³ããããã³ããã¥ã¡ã³ããä¿åããæ©èœã®è¿œå ãã©ã¡ãŒã¿ãŒãå®çŸ©ãããªãã·ã§ã³ã®ãªãã·ã§ã³ã»ããã§ãã èŠæ±ã¯ã¯ã©ã€ã¢ã³ãåŽã§æ€èšŒããããã©ã¡ãŒã¿ãŒãšãšãã«ãµãŒããŒã«éä¿¡ãããŸãã
ãµãŒããŒåŽã§ã¯ãåä¿¡ããã¥ã¡ã³ãã«äžæã®èå¥åãå²ãåœãŠãããŸãã ããã«ãããã¥ã¡ã³ãã®ã³ã³ãã³ãã¯ããã¥ã¡ã³ãã®æå®ããã圢åŒã«åŸã£ãŠè§£æããããã¹/å€ã®ãã¢ã«åå²ãããŸãããäžæã®ãã¹ã¯ãã¹ãŠããã¥ã¡ã³ããã¹ã®è€è£œãã£ã¬ã¯ããªã«æ ŒçŽãããŸãã 解ææé ã®æåŸã«ããã®ãããªãã¢ã«åå²ãããããã¥ã¡ã³ãã®ã³ã³ãã³ãå šäœãåæ£ã·ã¹ãã ãã£ãã·ã¥ã«æ ŒçŽããããµãŒãã¹æ å ±ãå«ãããã¥ã¡ã³ãããããŒããã£ãã·ã¥ãããŸãã ã€ã³ããã¯ã¹ãã¹ããŒãã«ç»é²ãããŠããå Žåããã¹ãŠã®ã€ã³ããã¯ã¹å€ãã€ã³ããã¯ã¹ãã£ãã·ã¥ã«ä¿åãããŸãã ããã¥ã¡ã³ããæ£åžžã«ä¿åãããããšã®ç¢ºèªãã¯ã©ã€ã¢ã³ãåŽã«è¿éãããŸãã
ããã¥ã¡ã³ããå®å šã«Bagriã«ä¿åããããã·ã¹ãã ã«ä¿åãããŠããããã¥ã¡ã³ãã«ãªã¯ãšã¹ããéä¿¡ããæ¹æ³ãèŠãŠã¿ãŸãããã
XQJæ¥ç¶ãååŸããŸãã
XQConnection xqc = context.getBean(XQConnection.class);
XQueryã¯ãšãªãæºåããŸãã
String query = "declare namespace s=\"http://tpox-benchmark.com/security\";\n" + "declare variable $sym external;\n" + "for $sec in fn:collection(\âsecurities\")/s:Security\n" + "where $sec/s:Symbol=$sym\n" + "return $sec\n"; XQPreparedExpression xqpe = xqc.prepareExpression(query);
æ€çŽ¢ãã©ã¡ãŒã¿ãŒã®å€ãèšå®ããŸãã
xqpe.bindString(new QName("sym"), âIBMâ, null);
ãµãŒããŒã§ãªã¯ãšã¹ããå®è¡ããŸãã
XQResultSequence xqs = xqpe.executeQuery();
ãããŠçµæãèŠãŠãã ããïŒ
while (xqs.next()) { System.out.println(xqs.getItemAsString(null)); }
ãã®ã³ãŒããå®è¡ããããšãã«ãµãŒããŒäžã§äœãèµ·ãããã«ã€ããŠè©±ãã®ã¯åããããé¢çœããšæããŸãã
ã¯ãšãªã¯XQueryããã»ããµïŒçŸåšã¯Saxon ïŒãééããã¯ãšãªå®è¡ããªãŒïŒã³ã³ãã€ã«æžã¿ã¯ãšãªãXQueryExpressionïŒã圢æãããŸãã 次ã«ãæå®ããããã¹ã«æ²¿ã£ãŠããã£ãã·ã¥ãããããŒã¿ã«å¯Ÿããäžé£ã®åçŽãªèŠæ±ã«å€æãããŸãã
[PathExpression [path=/ns2:Security/ns2:Symbol/text(), param=var0, docType=2, compType=EQ]], params={var0=IBM}
ãããã®åçŽãªèŠæ±ã¯ãåæ£ã·ã¹ãã ãã£ãã·ã¥ã®ãã¹ãŠã®ããŒãã§äžŠè¡ããŠå®è¡ãããŸãã èŠã€ãã£ãããã¥ã¡ã³ãã¯ãããã«åŠçããããã«ããã»ããµã«é ä¿¡ãããŸãã å¯èœã§ããã°ãèŠæ±ããããã¹ã«ã€ã³ããã¯ã¹ãä»ããããŠããå Žåãã€ã³ããã¯ã¹ã䜿çšãããŸãã ããã»ããµã«ããåä¿¡ããã¥ã¡ã³ãã®æçµåŠçã®åŸãçµæã¯å°çšã®éåæãã£ãã«ãä»ããŠã¯ã©ã€ã¢ã³ãã«éä¿¡ãããŸãã
ã·ã¹ãã æ¡åŒµãªãã·ã§ã³
Bagriã¯ãã·ã¹ãã ã®åäœãæ¡åŒµããè±å¯ãªæ©äŒãæäŸããŸãã ããšãã°ãããã¥ã¡ã³ãã®ç¶æ ã®å€åïŒæ¿å ¥/æŽæ°/åé€ã®ååŸïŒã«ããªã¬ãŒãæ¥ç¶ãããããã®ãã€ã³ãã§è¿œå ã®ããžãã¹ããžãã¯ãå®è¡ã§ããŸãã ããã«ã¯ãã·ã¹ãã ã«ä»å±ã®ãµã³ãã«ã®1ã€ã«ç€ºãããŠããããã«ãcom.bagri.xdm.cache.api.DocumentTriggerã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããã ãã§ååã§ãïŒsamples / bagri-samples-extãåç §ïŒã
public class SampleTrigger implements DocumentTrigger { private static final transient Logger logger = LoggerFactory.getLogger(SampleTrigger.class); public void beforeInsert(Document doc, SchemaRepository repo) { logger.trace("beforeInsert; doc: {}; repo: {}", doc, repo); } public void afterInsert(Document doc, SchemaRepository repo) { logger.trace("afterInsert; doc: {}; repo: {}", doc, repo); } public void beforeUpdate(Document doc, SchemaRepository repo) { logger.trace("beforeUpdate; doc: {}; repo: {}", doc, repo); } public void afterUpdate(Document doc, SchemaRepository repo) { logger.trace("afterUpdate; doc: {}; repo: {}", doc, repo); } public void beforeDelete(Document doc, SchemaRepository repo) { logger.trace("beforeDelete; doc: {}; repo: {}", doc, repo); } public void afterDelete(Document doc, SchemaRepository repo) { logger.trace("afterDelete; doc: {}; repo: {}", doc, repo); } }
ãããŠãconfig.xmlãã¡ã€ã«ã®åè·¯ã«ããªã¬ãŒãç»é²ããŸãã
<schema name="sample" active="true"> <version>1</version> <createdAt>2016-09-01T15:00:58.096+04:00</createdAt> <createdBy>admin</createdBy> <description>sample schema</description> <properties> âŠâŠâŠ </properties> <collections/> <fragments/> <indexes/> <triggers> <trigger xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:javatrigger"> <version>1</version> <createdAt>2016-09-01T15:00:58.096+04:00</createdAt> <createdBy>admin</createdBy> <docType>/{http://tpox-benchmark.com/security}Security</docType> <synchronous>false</synchronous> <enabled>true</enabled> <index>1</index> <actions> <action order="after" scope="delete"/> <action order="before" scope="insert"/> </actions> <library>trigger_library</library> <className>com.bagri.samples.ext.SampleTrigger</className> </trigger> </triggers> </schema> </schemas> <libraries> <library name="trigger_library"> <version>1</version> <createdAt>2016-09-01T15:00:58.096+04:00</createdAt> <createdBy>admin</createdBy> <fileName>bagri-samples-ext-1.0.0-EA1.jar</fileName> <description>Sample extension trigger Library</description> <enabled>true</enabled> <functions/> </library> </libraries>
äžèšã®ããã«ãããªã¬ãŒå®è£ ãå«ãã©ã€ãã©ãªïŒbagri-samples-ext-1.0.0-EA1.jarïŒãç»é²ããŸããã ã©ã€ãã©ãªã«ã¯ãXQueryã¯ãšãªããåŒã³åºãããšãã§ããJavaã§èšè¿°ãããè¿œå ã®é¢æ°ãããã³æ°ããããŒã¿åœ¢åŒãåŠçããããå€éšããã¥ã¡ã³ãã¹ãã¬ãŒãžã·ã¹ãã ã«æ¥ç¶ããããã®æ¡åŒµæ©èœãå«ããããšãã§ããŸãã
ã·ã¹ãã å°å ¥ãªãã·ã§ã³
Bagriã¯ã次ã®æ¹æ³ã§å±éã§ããŸãã
- ã¹ã¿ã³ãã¢ãã³Javaã¢ã㪠-éãããããŒã¿ã»ãããåŠçããå¿
èŠãããå°ããªã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã ãã¹ãŠã1ã€ã®ã¹ããŒã ã§1ã€ã®JVMã®ãã¬ãŒã ã¯ãŒã¯å
ã§æ©èœããéãããïŒ1ã€ã®JVMã®ã¡ã¢ãªïŒããŒã¿ããªã¥ãŒã ã§æ倧ã®ããã©ãŒãã³ã¹ãæäŸããŸãã
- ã¯ã©ã€ã¢ã³ããµãŒããŒãåæ£ããŒã¿ããŒã¹ -ã¯ã©ã€ã¢ã³ãã¯ãXDM / XQJãã©ã€ããŒãä»ããŠåæ£ã¹ãã¬ãŒãžã·ã¹ãã ãšéä¿¡ããŸãã ã¡ã¢ãªå
ã®ãªã¯ãšã¹ãã®åæ£åŠçãç¡å¶éã®éã®ããŒã¿ããªã³ã©ã€ã³åŠçããæ©èœ
- 管çãµãŒã㌠-çµ±èšãåéããã·ã¹ãã ã®äœæ¥ããŒãã®ã¹ããŒã¿ã¹ãç£èŠããããã®è¿œå æ©èœãæäŸããŸãã éåžžãå¥åã®ããŒããšããŠãããã€ãããŸãããããã¯å¿ é ã³ã³ããŒãã³ãã§ã¯ãªããã·ã¹ãã ã¯ãããªãã§ãæ©èœããŸãã
ããžã¥ã¢ã«ç®¡çã€ã³ã¿ãŒãã§ãŒã¹
Bagriã®èŠèŠçãªç®¡çã€ã³ã¿ãŒãã§ã€ã¹ã¯ãçŸåšVisualVMã®ãã©ã°ã€ã³ãšããŠå®è£ ãããŠããã次ã®ããšãã§ããŸãã
- ãŠãŒã¶ãŒãšããŒã«ãæ§æãã
- ã¯ãšãªã§äœ¿çšããããã«ãå€éšJavaé¢æ°ã©ã€ãã©ãªãšè¿œå ã®XQueryã¢ãžã¥ãŒã«ãæ¥ç¶ããŸã
- ã¹ããŒã ãšãã®ã³ã³ããŒãã³ãã®æ§æïŒã³ã¬ã¯ã·ã§ã³ãã¡ã¿ããŒã¿ãã£ã¯ã·ã§ããªãã€ã³ããã¯ã¹ãšããªã¬ãŒãã¹ããŒã ãžã®ãŠãŒã¶ãŒããã³ããŒã«ã¢ã¯ã»ã¹
- ããã¥ã¡ã³ããšã³ã¬ã¯ã·ã§ã³ãèŠèŠçã«è¡šç€ºãã
- XQueryã¯ãšãªãå®è¡ããçµã¿èŸŒã¿ã³ã³ãœãŒã«ããçµæãååŸããŸã
ãã®ã¢ãžã¥ãŒã«ã¯ãŸã 掻çºã«éçºãããŠããããã©ã°ã€ã³ã®æ©èœã¯åžžã«æé·ããŠããŸãã ãšã©ãŒãæ€åºããå Žåãããã³æ©èœãæ¬ èœããŠããããšãææ¡ããå Žåããããžã§ã¯ãã®åé¡ã«åžžã«å«ããããšãã§ããŸãïŒãããã¹ãã§ãïŒïŒã
管çã³ã³ãœãŒã«ã®ã¹ã¯ãªãŒã³ã·ã§ãã-以äžãåç §
ããã§ãåæ£Bagriããã¥ã¡ã³ãããŒã¿ããŒã¹ã®æãåºæ¬çãªæ©èœã調ã¹ãŸããã ãã®ãããžã§ã¯ãã«èå³ãæã¡ãæ¥åžžã®ä»äºã§ããã䜿ã£ãŠã¿ãŠãã ããã
ç§ã®åŽã§ã¯ãè¿ãå°æ¥ãBagriãBaseXãMongoDBãCassandraãªã©ã®ä»ã®é¡äŒŒè£œåãšæ¯èŒãããããã¯ãããã³çµã¿èŸŒã¿APIïŒDataFormat APIããã³DataStore APIïŒã䜿çšããŠã·ã¹ãã ãæ¡åŒµããå¯èœæ§ã«ã€ããŠèª¬æããèšäºãããå°ãæžããŠã¿ãŸãã
Bagriã¯ãä»ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããšåæ§ã«ããã®ãããã¯ã«èå³ã®ããJavaéçºè ãå¿ èŠãšããããããã®èšäºãèªãã§ãããããžã§ã¯ãã«èå³ãããã°ã Bagri Githubã«ãããããå€ãã®èå³æ·±ãã¿ã¹ã¯ããããŸãã