HarperDBとは何か、Akamai Cloud Computingと連携した強みを理解する

# HarperDB とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/5593d0dc-f24e-225d-e8b9-32af766a7010.png)

HarperDBとは、SQL、NewSQL、および MongoDB などの NoSQL 製品の機能を拡張および融合するためにゼロから構築されたDistributed Edge Databaseです。
Akamai Cloud Computing上で展開することができ、HarperDBのインスタンスは複数のリージョンに跨いで構成することができるため、グローバルに分散されたデータベースを簡単に用意することができます。
また、HarperDBは単なるデータベースだけではなく、HarperDBインスタンス上にクラスタリングされたアプリケーションの展開も行うことができます。
そのため、グローバルで同一のデータを利用して低レイテンシーでAPIを提供したいサービスなどの基盤に最適なプラットフォームです。

https://www.harperdb.io/

## Akamai Cloud Computing に展開できるHarperDB

HarperDBは、Windows, Linux, Mac 上でも構築することができ([Install HarperDB](https://docs.harperdb.io/docs/deployments/install-harperdb)
)、ネットワークを意識せず、様々な基盤を跨いだデータベースを構築することができるのが特徴です。


AkamaiとHarperDBはテクノロジーパートナーであり、Akamaiにて提供するHarperDBでは [HarperDB Cloud](https://docs.harperdb.io/docs/deployments/harperdb-cloud) としてAkamai Cloud Computing 上に展開されるマネージドサービスとして統合されております。
HarperDB Cloud はマネージド・サービスなのでインストールスクリプトを実行したり、OS等のメンテナンスを行う必要がありません。HarperDB の管理は[HarperDB Studio](https://docs.harperdb.io/docs/administration/harperdb-studio)から行うこともできます。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/ccd96530-e8cc-f1e1-aef6-6b14bb0200a2.png)

## HarperDBの仕組み

HarperDBのストレージアルゴリズムは、HarperDBのコアの要素となり、ダイナミックスキーマやその他すべてのユーザー向け機能を実現しています。HarperDBは、キーバリューストアであるLightning Memory-Mapped Database (LMDB)の上に構築されており、ストレージアルゴリズムによってデータを行/オブジェクトとしてテーブルに格納することができます。
このアルゴリズムは、個々のクエリ言語に対応できるようデータベースを抽象化して設計されており、SQLやNoSQLの言語を利用してデータを取り出す事が可能です。データベースへのアクセスには様々な言語からアクセスするための[SDK libraries](https://docs.harperdb.io/docs/developers/components/sdks)、 BIツールなどから接続するための[Drivers](https://docs.harperdb.io/docs/developers/components/drivers)が用意されています。
また、HarperDBは各ノードごとに[ACID](https://ja.wikipedia.org/wiki/ACID_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%A7%91%E5%AD%A6))に独立して準拠しています。
そのため、各ノードは読み込み、書き込みが独立して動作し、他のノードから読み書きをロックされることもありません。
HarperDBの各ノードは単一な書き込みプロセスを持ち、書き込みが受信された順序で処理が行われることを保証します。
書き込みされたデータはメモリに保存し、すぐにディスクにフラッシュされ、耐久性が確保されます。
ただし、ノード間での[ACID準拠は保証されず](https://www.harperdb.io/faqs)、最終的な一貫性が「最後に書き込まれたデータが優先される」という方式で変更が伝播されます。

[HarperDB Storage Algorithm](https://docs.harperdb.io/docs/technical-details/reference/storage-algorithm)

<img width="500" alt="harperdb1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/287739b5-400e-c5a5-2659-41fcc9356e26.png">

分散されたHarperDBインスタンス間のデータの同期は[NATS](https://www.harperdb.io/announcements/harperdb-4-0-delivers-enterprise-grade-global-application-development-to-every-developer)を利用することでレプリケーションを実現しています。
そのため、メッシュ構成でデータベースを構築することが可能です。

<img width="500" alt="harperdb3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/859cdc99-f92e-19c2-9e0d-c291027289b1.png")>

データが取り込まれた際には自動的に[Dynamic Schema](https://docs.harperdb.io/docs/technical-details/reference/storage-algorithm)によりインデックスが付与されます。データ型に依存することがないため、様々なデータでHarperDBを活用することができます。

インデックスの付与された単一テーブルの例

<img width="500" alt="harperdb2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/ade2354b-cc3c-f280-495b-9d4aee7120fb.png">


## Akamai Cloud Computing 上にHarperDBを構築するメリット
HarperDBをAkamai Cloud Computingに構築することによりグローバルで低レイテンシーのアプリケーションを展開することができます。

Akamai Cloud Computingは執筆時点で27リージョンに展開しており、[Generalized Edge Compute（Gecko）](https://www.akamai.com/ja/newsroom/press-release/akamai-takes-cloud-computing-to-the-edge)という構想を立ち上げ数多くの都市にコンピューティングを展開する予定です。


各HarperDBへのインスタンスは[Akamai GTM](https://www.akamai.com/ja/resources/product-brief/global-traffic-management)によるDNSロードバランシングにより最適なロケーションへアクセスすることができるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/c9c9c0a7-d221-67be-773a-ad3abc5f7965.png)

## HarperDB Applicationの活用

HarperDBは単なる分散データベースだけではなく、データベースが構築されるインスタンスにアプリケーションを構築することもできます。
[HarperDB Application](https://docs.harperdb.io/docs/developers/applications)は、データベースの内容を取得するためのRestAPIを作成したり、JWT認証を行ったりなど、簡単に構築できるスキーマが用意されております。
また、カスタム機能を実装したい場合にはJavascriptにてコードを記載することで、要件に応じたアプリケーションも作成することができます。

Akamai CDNと親和性の高いHarperDB Applicationの１つの機能として[Caching](https://docs.harperdb.io/docs/developers/applications/caching)があります。
一部のAPIでは頻繁に値が変更されるため、長いTTLを設定できず、CDNのキャッシュによる高いオフロード率が確保できないケースがあります。
HarperDB上にキャッシュレイヤーを構築することで、APIやGraphQL、DBキャッシュなどを行うことができ、複数のユーザーや異なる地域でのデータ提供のユースケースに対して、低レイテンシーでデータを提供することができるようになります。

キャッシュ機能の実装は[HarperDB Distributed Cache](https://www.harperdb.io/solutions/distributed-cache)として提供しておりますので、ぜひご相談ください。

<img width="400" alt="harperdb3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/5c5c49c8-bde0-ffae-b173-5382ce342258.png">



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/7dce287b-3883-9c75-2785-c65fc278c918.png)


## パフォーマンス

HarperDBはパフォーマンスにも優れており、人気のあるNoSQL製品であるMongoDBと比較しても引けを取らない性能を発揮します。

[HarperDB vs. MongoDB](https://www.harperdb.io/resources/harperdb-vs-mongodb)

MongoDBはとても素晴らしい性能ですが、HarperDBはMongoDBより「読み取りが最大98倍」「書き込みが最大20倍」高速であることが上記リンク先のレポートから確認ができます。

このベンチマークはHarperDBとMongoDBの単一ノードに対して、データの読み取りと書き込みを複数パターン試験したものです。
また、テストにはApache JMeterを利用しており、HarperDBの接続はREST API、MongoDBの接続はMongoDB Java Driversを利用しています。

レポート結果から、書き込み性能に関しても優れているのですが、HarperDBは特に読み込み性能が優れており、参照負荷の高いサービスにも向いていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e537ae6e-5552-50ff-aea9-ae6be8cb6605.png)

[レポートのダウンロード](https://cdn.prod.website-files.com/6377ac1a39ff1e65214224e5/65b2c526127626997d2e1748_MongoDB_HarperDB_Benchmark_Final-compressed.pdf)

# まとめ

AkamaiとHarperDBを組み合わせることで、分散されたコンピューティングリソースを活かして、グローバルで低レイテンシーなサービスを提供することが可能になります。
HarperDB Cloudの環境はAkamaiから纏めてご提供することができますので、ぜひ様々なユースケースにてご相談いただければと思います。


Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
- [Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)

# 関連記事

アカマイ・テクノロジーズ合同会社はQiitaでAkamai Cloud Computing Services関連など開発者向けの記事を掲載しております。

https://qiita.com/xenbase/items/52e2956a64cedc772bd9