NextcloudのMapsアプリの利用をあきらめた話

2022-10-14
  • B!

Nextcloud

 Nextcloudには位置情報付きの写真を地図に並べるMapsアプリがある。

Maps

使い初めは便利なアプリかなと思いつつも結局、使用頻度が低い割にはDBにかかる負担が大きいので使用をやめてしまった。

このアプリはデータベースにテーブル oc_maps_photos を作り、ファイルIDとそれに紐づく位置情報情報をテーブル内に記録する。

私が問題視したことは、位置情報のEXIFが無い画像の情報もテーブルに記録している点。7万ファイルを管理していると、Mapsアプリのために新たに7万レコードが生成されてしまう。しかし、実際に位置情報がついている画像は3割ぐらいか。古いデジカメで撮影した画像にはほとんど位置情報のEXIFタグついていないのだが、それらのファイルIDも全部Mapsが管理しているテーブルに登録されてしまう。

さらに、oc_maps_photos のスキーマを見ると驚愕の事実が。

> show columns from oc_maps_photos;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | bigint      | NO   | PRI | NULL    | auto_increment |
| user_id    | varchar(64) | NO   |     | NULL    |                |
| file_id    | bigint      | NO   |     | NULL    |                |
| lat        | double      | YES  |     | NULL    |                |
| lng        | double      | YES  |     | NULL    |                |
| date_taken | bigint      | YES  | MUL | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
6 rows in set (0.51 sec)

なんと user_id というフィールドがある。画像表示をする際にユーザーのアクセス権限が必要となるのが理由だと思うが、このカラムがあるということは、各ユーザー単位でアクセスできるファイルの情報が全てDBに記録される。これはNextcloud上の共有フォルダを管理対象とするときにDB負荷の問題を起こす。

どいうことかというと、とあるファイルZを共有フォルダに置くと、ファイルにアクセス権があるユーザーAさんのファイルZとしてoc_maps_photosに登録されたのち、共有ファイルなので今度はユーザーBさんのファイルZとしてもoc_maps_photosへ追記される。

すなわち共有フォルダのファイルについては、 (総ファイル数) x (ユーザー数) の件数のエントリーが oc_maps_photos に記録されるのである。私の場合、先ほどの7万枚の写真と動画が入っているフォルダをNextcloudの共有フォルダ機能で複数ユーザーが利用できるようにしていたので、oc_maps_photos には7万件 x ユーザー数という膨大なレコード数のデータが格納されてしまっていた。そこまでのデータを取り扱いできるようなスペックのマシン環境ではないので厳しいものがあったのである。

また、このMapsアプリはスマートフォンには対応しておらずやや使いにくさが。

以上のような事情で、現在はMapsアプリの使用を停止している。Mapsはあくまでも3rd partyアプリなので、ファイルアクセス権を得るための実装に無理があるのは致し方がない点があろう。

Nextcloudは余計なアプリを外した方が軽くなるので、追加機能の断捨離をした方が良い。