コンテンツにスキップ

テストごとに新しい状態を。container待ちなしで。

OpenSearch互換のbaseを一度seedし、テストごとに独立したforkを渡す。公式clientはそのまま。重い検索containerの起動は要りません。

テストごとに新しい状態を。検索engineは起動し直さない。

Section titled “テストごとに新しい状態を。検索engineは起動し直さない。”

seed済みbaseを共有し、読み取り専用テストは直接検索できます。document、mapping、indexの状態を変えるテストには専用のcopy-on-write forkを渡します。テストが変更するindexだけが複製されます。

seed済みtest環境の起動時間

各経路の平均。osmemは525-byte seedを読み込みreadyになるまで、container系はwarm imageからPUT /benchmark成功まで。

Go組み込み · 日本語無効2.02 ms
Go組み込み · 日本語有効335.1 ms
Docker · OpenSearch6.07 s
Testcontainers Go · OpenSearch、data tmpfs6.48 s
Devbox services up -b · OpenSearch7.94 s

server起動中のmemory

Docker rowはDocker報告のcontainer memory。Testcontainersはdata pathに1GiB tmpfsを使い、Go runnerのRSS増分だけを加算。

osmem server · 日本語有効162 MiB
Docker · OpenSearch container942 MiB
Testcontainers Go · container + runner増分、tmpfs956 MiB
Devbox · container + service process1,009 MiB

変更テスト用cloneの生成時間

構築済みの日本語有効indexをforkする時間。writeやcloseは含めません。

Go組み込み · Cluster.Clone()0.8 µs
Python · server.clone()0.22 ms
Java · server.clone()0.51 ms
Node.js · server.clone()1.77 ms

同日にroute table cache化の修正が入り、Go組み込みのClone()はこのページで過去最速になりました。詳細は性能ページを参照してください。

link後binaryと初回downloadのfootprint

10進MBの同一scale。barは別々の対象を表し、package全体の同種比較ではありません。

Go app · osmem + 日本語analyzerのlink増分 (+41.8 MiB)43.8 MB
Devbox · Maven/JDK環境の初回download (194.1 MiB)203.5 MB
OpenSearch 2.19.0 · Docker Hub圧縮値、linux/arm64739.3 MB

2026-09-16に再計測しました。OpenSearch 3.8互換性修正と2つの性能改善(in-memory segment merge、typedなtop-K sort実行)を経た後の値です。before/afterは計測ページを参照してください。起動グラフはGo組み込みの日本語無効/有効を比較します。有効時はseedに含むkuromoji analyzerの初期化も含み、525-byte seedに対するNew()+LoadSeed()を計測しています。Python・Java・Node.js SDKの起動値と範囲は計測ページにまとめました。cloneはGo 5,000回×5、SDK各300回で生成のみ計測。Devboxはprocess-compose経由で同じDocker-backed OpenSearchを起動し、初回downloadのMaven/JDK環境はserver imageと別です。container imageは取得済み。Testcontainersはdata pathに1GiB tmpfsをmountし、初回trialでRyukを起動。Docker報告のcontainer memoryはdaemonを除外し、Testcontainers Goは起動前からのrunner RSS増分を加算しています。ready条件が異なるため、厳密なengine比較ではなくローカルの経路比較です。