私は現在、MySQLデータベースに大きく依存する2つのiOSアプリケーションを開発中です。それらはそれぞれ、MySQLデータベースからのデータを要求する関連クエリを実行するそれぞれのアプリケーションによって要求される独自のAPIを持っています。
クエリは、単純なもの、ユーザーベース、または「オブジェクト」ベースのものとは異なります。
SELECT `username`, `id`, `full_name` FROM `users` WHERE `id` = 1
INSERT INTO `users` (`full_name`, `username`, `email`, `password`, `signup_method`, `latitude`, `longitude`) VALUES (?, ?, ?, ?, ?, ?, ?)"
SELECT q.*, (SELECT COUNT(a.qid) FROM answers as a WHERE qid=q.id) AS a_count FROM questions as q ORDER BY a_count DESC LIMIT 1, 10
ロケーションベースへ:
SELECT ( 6371 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS distance FROM `users` HAVING distance <= 5 ORDER BY points DESC
SELECT * , (6371 * acos(cos(radians(latitude)) * cos(radians({$values['latitude']})) * cos(radians({$values['longitude']}) - radians(longitude)) + sin(radians(latitude)) * sin(radians({$values['latitude']})))) AS distance FROM `questions` HAVING distance <= ? ORDER by distance LIMIT ?,?
これらのクエリには明らかに時間がかかります。特に後者は、それが引き起こすパフォーマンスの強さによるものです。
多くのサービスは、パフォーマンスを向上させるためにデータベースと一緒にキャッシュレイヤーを使用します。例えば:
- Memcachd
- Redis
- もっと。
私の質問は、クエリに関して、いつキャッシングを使用する必要があるのか、そしてキャッシングを使用する利点は何ですか?
ありがとう、
マックス!