メインコンテンツへスキップ

Blocklet StoreがデータベースにSQLiteを採用

Pengfei Zhu
Blocklet StoreProduct Release

エコシステム内のBlockletの数が増加するにつれ、ユーザー体験とパフォーマンスは常に私たちのチームの最優先事項です。Test Storeから得たいくつかの知見をもとに、Blocklet Storeのデフォルトデータベースを NeDB から SQLite へ変更しました。この変更により、メモリ消費量とデータの安全性が改善されています。ぜひお試しいただき、フィードバックをお寄せください。

Blocklet Store

なぜSQLiteなのか

メモリ使用量の削減

NeDBはすべてのデータをメモリに読み込むことでクエリ機能を実現しており、データ量が増加するにつれてこの方式は大量のランタイムメモリを消費し、パフォーマンスの問題やサービスクラッシュを引き起こす可能性があります。

SQLiteへの移行後、データベースはインデックスを使用するようになり、大量のメモリ使用が不要になったことで、サーバーの稼働時メモリ使用量が大幅に削減されました。以下に示す実際の稼働データからも、移行後にメモリ使用量が明確に減少し、パフォーマンスの安定性が向上していることがわかります。

image.png

データ損失のリスク

先日、異常なサービスクラッシュにより、Test Store のデータが短時間失われる事態が発生しました。この間、ユーザーはTest StoreのBlockletにアクセスできませんでした。このサービスクラッシュの原因はNeDBにあり、NeDBのデータ永続化は非同期で行われるため、サービスクラッシュ時にデータが速やかにディスクへ書き込まれず、データ損失につながっていました。

SQLiteへの移行後、データベースはトランザクション機構と WAL(Write-Ahead Logging) モードを採用しており、データの一貫性と安全性を確保しています。システム異常やクラッシュが発生した場合でも、未完了のトランザクションがデータベースファイルの整合性に影響を与えることはなく、データ損失のリスクを大幅に低減します。

その他の利点

  1. クエリ機能の強化: SQLiteは複雑なマルチテーブル結合、サブクエリ、ウィンドウ関数を含む標準SQLクエリをサポートしており、より幅広いユースケースやアプリケーション機能に適しています。
  2. 優れたスケーラビリティ: SQLiteは小規模から中規模のデータセットを効果的に処理でき、データ量が増加しても効率的なパフォーマンスを維持します。
  3. 豊富なツールとエコシステムのサポート: SQLiteはDB Browser for SQLiteなどの充実したツールサポートと活発なコミュニティエコシステムの恩恵を受けており、デバッグや管理が容易です。Node.js環境でのバッチ挿入や高並行処理シナリオにおいても優れたパフォーマンスを発揮します。

注意事項

Blocklet Store をご利用中の方には、アップグレード時にデータベースをNeDBからSQLiteへ自動的に移行する自動移行スクリプトを用意しています。さらに、データ損失がないかを確認し、損失があれば復旧を試みます。復旧に失敗した場合は、/api/console/blocklets/meilisearch_sync_failed インターフェースから復旧失敗したBlockletを確認できます。Blocklet Store を起動した後、データが失われていないかもご自身で確認いただけます。何か問題が発生した場合やサポートが必要な場合は、お気軽にお問い合わせください。喜んでサポートいたします。

お知らせ: 失われたデータは技術的手段により復旧済みです。

コミュニティからのフィードバック:

  1. blocklet storeの一覧と詳細のダウンロード数データが一致しない fatych CrypThor
  2. Test Store - 自分のBlockletの1/3が削除されるバグ CrypThor
  3. install URLコピー時のデモ画像のアスペクト比が崩れる Zhu Liang
  4. Blockletを正しいホストでレンダリングすべき Shijun Wang
  5. 変更履歴が長すぎる場合は最新の項目のみ表示するよう制限する Shijun Wang

ご協力のお願い

新しいストア体験について、ご要望・ご提案・ご不明な点がございましたら、ぜひコミュニティまでフィードバックをお寄せください。

ArcBlock Community

このページに関わるもの

製品

  • Blocklet Store sunset

    Blocklet が公開され、見つけられ、インストールされていた場所。ARC はこれを別の方法で扱うため、Store は不要になりました。