Nextcloud におけるファイルスキャン速度を比較してみた


はじめに

Nextcloud では、通常は、ブラウザ画面、デスクトップ/モバイルアプリ、WebDAV (クライアントアプリ/API) といった様々な方法でファイルのアップロードを行うことができます。

ただ、大量ファイルの移行の場合は、これらの方法ではとても時間がかかってしまうため、いったんサーバーにファイルの実体を置いてしまって、Nextcloud のファイルスキャン機能を利用して同期をとる方法により比較的短時間に移行が可能です。

Nextcloud 単体で利用する場合、ユーザーごとのローカル領域のほかに、グループフォルダと呼ばれる Nextcloud システムが保有してアクセス権限を付与するフォルダ領域を利用することができます。

ファイルスキャンの方法は以下のようにいくつか準備されております。

  • ローカル領域の場合
    • occ files:scan [ユーザーID] による同期。
  • グループフォルダの場合
    • occ groupfolders:scan [グループフォルダID] による同期。
    • 書き込み権限を持つユーザーを利用しての occ files:scan [ユーザーID] による同期。

今回は、ファイルスキャンの速度が方法によってどれほど違うのかを検証してみました。

検証の条件

Nextcloud サーバー環境

  • Nextcloud アプリケーションのバージョン
    • Nextcloud: 17.0.1
    • グループフォルダアプリ: 5.0.4
  • ミドルウェアのバージョン
    • PHP: 7.3
    • MariaDB: 10.4
  • サーバー構成: Nextcloud 本体、データベース等を含めた1台のオールインワン。
  • サーバー環境: AWS EC2(CentOS7、M5.large)+EBS(gp2(SSD) 50GB)

検証ファイル/フォルダ数

  • フォルダ数: 8,355
  • ファイル数: 62,780
  • 合計ファイルサイズ: 615 MB
  • フォルダ階層やファイル配置は基準フォルダ以外は全く同一。

検証方法

  • テストファイル/フォルダ群を Nextcloud サーバの規定ディレクトリに配備し、 occ files:scan [アカウント名] コマンドでファイル/フォルダの同期を行う。
  • グループフォルダの同期については、 occ groupfolders:scan コマンドでも同期を行うことができるので、こちらも比較対象とする。
  • テストは3回行って、実行平均時間で比較する。

検証結果

実行時間 (ローカル領域) 実行時間 (グループフォルダ:files:scan) 実行時間 (グループフォルダ:groupfoldes:scan)
1 2分15秒 36分55秒 4分07秒
2 2分15秒 36分18秒 4分06秒
3 2分15秒 36分56秒 4分05秒
平均 2分15秒 36分07秒 4分06秒

⇒ ローカル領域でのファイルスキャンが最速。グループフォルダを files:scan する方法は圧倒的に遅い。

考察、あとがき

グループフォルダでのファイルスキャンに時間がかかっているのは、グループフォルダの機能として、ファイルやフォルダ単位にアクセス権限を設定できるため、この権限設定を行っている分時間がかかっていると思われます。
さらに、グループフォルダを files:scan で同期する方法は圧倒的に遅いのは、スキャンごとにグループフォルダへのアクセス権限チェックが行われているためと推測します。

ファイルの移行作業にあたっては、普通は事前にテストを実施するなどして実行時間の見込みを測定したうえで移行計画を策定すると思いますが、グループフォルダ内のファイルスキャンはローカル領域よりも時間がかかる傾向、という知識は持っておいてよいと思います。