SolrFlute
Solr の schema.xml を読み込んで、
Solr用の Behavior と ConditionBean を自動生成します。
OptionalEntity<SolrExample> result
= solrExampleBhv.selectFirst(cb -> {
cb.query().setProductName_RangeSearchFrom("P");
});
SolrPagingResultBean<SolrExample> result
= solrExampleBhv.selectPage(cb -> {
cb.query().setLatestPurchaseDate_RangeSearchFrom(from);
cb.paging(10, 1);
});
SolrFacetResultBean result
= solrExampleBhv.selectFacetQuery(cb -> {
cb.query().setProductName_Equal("foo");
cb.addFacetQuery(qb -> {
qb.setLatestPurchaseDate_RangeSearchTo(...);
qb.setLatestPurchaseDate_RangeSearch(...);
qb.setLatestPurchaseDate_RangeSearchFrom(...);
});
cb.query().addOrderBy_ProductName_Asc();
});
コードの見た目は別に目新しくないかもしれない笑。
つまり、普通の ConditionBean と同じなんです。
それが嬉しいですよね。
同じノリで書けて、そしてSolrもタイプセーフ!!!
KVSFlute
こっちはもうちょい複雑ですが便利です。
KVS (Redis) ってスキーマ構造が存在しませんが、
別にぐちゃぐちゃに入れるわけではありません。
ある程度、
"こういう名前でこういうのを入れる"
って決めてプログラムで制御するものです。
ということは...
"こういう名前でこういうのを入れる"
という情報さえわかれば、
同じように ConditionBean が作れるだろうと。
その情報は、とある JSON 形式のファイルに書いておきます。
{
"product": {
"$comment": "Product",
"productId": {
"$comment": "ID",
"many": false,
"kvsKeys": ["PRODUCT_ID"]
},
"categoryCode": {
"$comment": "Category code of each product",
"many": true,
"kvsKeys": ["PRODUCT_CATEGORY_CODE"],
"orderBy": ["REGULAR_PRICE", "PRODUCT_ID"]
}
}
}
そして、自動生成すると...
OptionalEntity<Product> result
= kvsProductBhv.selectEntityByProductId(cb -> {
cb.query().setProductId_Equal(productId);
});
List<Product> productList
= kvsProductBhv.selectListByCategoryCode(cb -> {
cb.query().setProductCategoryCode_Equal(categoryCode);
cb.query().setProductStatusCode_Equal(statusCode);
cb.query().addOrderBy_RegisterDatetime_Desc();
});
kvsProductBhv.insertOrUpdateByCategoryCode(() -> {
Product product = new Product();
product.setProductName(productName);
product.setProductHandleCode(productHandleCode);
product.setProductCategoryCode(categoryCode);
product.setProductStatusCode_OnSaleProduction();
product.setRegularPrice(price);
return product;
});
大きく二つの機能分かれていて...
o KVSキャッシュ
o KVSストア
...
KVSキャッシュは、RDBのキャッシュとしてKVSを使う。
1. 指定された条件に一致するKVSにあればそれを戻す
2. なければRDBから検索する
3. その検索されたデータをKVSに登録しておく
4. その検索されたデータを戻す
このよくあるキャッシュの手続きも、
自動生成されたクラスの中で解決しています。
RDB の Behavior と簡単に連携できるのが特徴。
...
KVSストアは、もっとシンプル。
単にKVSにデータを出し入れするだけ。
それがタイプセーフになっていると。