MicroStreamはJavaオブジェクトとドキュメントを格納するための永続化エンジンである。これにより、パフォーマンスとリソース効率の高い方法で、オブジェクトグラフを部分的かつオンデマンドでロード、更新、永続化することができる。MicroStream 7では、Contexts and Dependency Injection(CDI)との統合、スタンドアロン機能としてのシリアライザロジック、SLF4Jによるロギングサポートが提供される。
MicroStreamでは、AWS S3、Hazelcast、Kafka、MongoDB、Redis、そして、他にもSQLデータベースといった、さまざまなストレージオプションがサポートされている。一部のストレージオプションは、エンタープライズサブスクリプションでのみ使用できる。リファレンスマニュアルの入門パートには、プレーンJavaでMicroStreamを使う方法、またHelidonやSpring Bootに統合する方法が記載されている。
このバージョンでは、MicroStream CDI拡張機能が導入されている。CDI 2.0か、それ以降のバージョンの実装が必要である。microstream-integrations-cdiアーティファクトを通して利用できる。この拡張機能は、既存のSpring BootとHelidonの統合に相当するものである。MicroProfile Config仕様は、プロパティから設定を読み取るために使われ、MicroProfileランタイムをサポートする。あるいはJava SE CDIをSmallRye ConfigなどのMicroProfile Config実装と組み合わせるために使われる。
アプリケーションには、MicroStream実装に接続する@Storage
アノテーションが付けられた1つのクラスが必要である。
@Storage
public class CarStorage
{
private final List<Car> carList = new ArrayList<>();
public List<Car> findAll() {
return this.carList;
}
public void removeAll() {
this.carList.clear();
}
public void add(final Car car) {
this.carList.add(car);
}
}
@Storage
アノテーションが付けられたクラスは、ApplicationScoped
Beanに挿入される。データ変更メソッドには@Store
アノテーションを付ける必要がある。
@ApplicationScoped
public class CarStorageService {
@Inject
private CarStorage carStorage;
@Store
public void addCar(Car car) {
carStorage.add(car);
}
@Store
public void deleteCars() {
carStorage.removeAll();
}
public List<Car> findCars() {
return carStorage.findAll();
}
}
MicroStreamのCDI統合は、キャッシュデータの保存にも使うことができる。
@Inject
@StorageCache
private Cache<String, String> myCustomCache;
MicroStreamではカスタムの高性能シリアライザエンジンが使われる。これは、APIを介して公開されており、microstream-persistence-binaryの依存関係を追加することでスタンドアロンで使用できる。バイト配列をデシリアライズした後、各クラスにユニークな番号が同じであることを確認するために、エンティティタイプを登録する必要がある。
CarPart porscheCarPart = new CarPart("wheel", 23.23);
Car porsche = new Car("Porsche", "911", List.of(porscheCarPart));
final SerializerFoundation<?> foundation = SerializerFoundation.New()
.registerEntityTypes(Car.class);
final Serializer<byte[]> serializer = Serializer.Bytes(foundation);
byte[] data = serializer.serialize(porsche);
Car deserializedCar = serializer.deserialize(data);
assertEquals("911", deserializedCar.getModel());
assertEquals(23.23, deserializedCar.getCarPartList().get(0).getPrice());
新しいロギング機能では、ロギングファサードとしてSLF4Jが使われる。ロギングフレームワークの依存関係を追加することにより、Logbackなどのロギングフレームワークと一緒に使うことができる。
Androidの日付と時刻のインスタンス用のカスタムハンドラは、新規のmicrostream-persistence-binary-androidアーティファクトを通して利用できる。これは、最近のAndroidバージョンのリフレクションの課題を解決するためのものである。
メモリ使用量とメモリの解放が最適化され、いくつかのバグが解決された。
2019年に最初に導入されたMicroStreamは、MicroStream 5.0のリリースでオープンソースになった。この最新バージョンは、MicroStream 6との下位互換性がある。コミュニティユーザ向けに12か月間無料でサポートされる。次のメジャーリリースは2023年4月に予定されている。計画されている新機能の1つは、いくつかのMicroStreamインスタンス向けのクラスタサポートである。全変更一覧の詳細については、変更ログを参照してください。