質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

915閲覧

TinderライクなマッチングアプリのDB設計について

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/06/30 00:40

現在DBはFirestoreを使って、iosでTinderライクなマッチングアプリを作ろうとしています。
マッチングアプリなので、一度表示した相手は、一定期間もしくは全他ユーザーを表示しきるまでは、再び表示されないようにしたいのですが、そのための効果的なDB設計がわかりません。

現状のDBとしては、
Usersコレクションがあり、その中に各ユーザーを示すドキュメントがあるという状態です。
そして、今は単純にそのコレクションから普通にユーザーを取ってきて表示しているので、一度表示した相手も再び表示されます。

今の所考えている方法としては、以下の二つです。


TimeStampコレクションを作って、ユーザーが他ユーザーをスワイプする度に、
TimeStamp/ユーザーUID/OtherUsers/他ユーザーUIDのfieldに["matched":Bool], ["lastShowed": その時の時刻]を書き込んでいく。
そして、相手を表示するときには、一度Usersコレクションからドキュメントを取得し、その各UIDでTimeStamp/ユーザーUID/OtherUsers/そのUIDのドキュメントで、matched==falseかつlastShowedと現在時刻が一定期間経過してるかを、判定して、それが大丈夫なら、表示する。大丈夫でないなら表示しない。


各ユーザーのドキュメントに新たにOtherUsersのコレクションをつくる。
新たなユーザーが登録する度に、全ユーザーのOtherUsersコレクションに、新たなユーザーUIDのドキュメントを作り、そのフィールドに["matched":Bool], ["lastShowed": その時の時刻]を書き込んでいく。
相手を表示する時は、Users/ユーザーUID/OtherUsersコレクションから、matched==falseかつlastShowedと現在時刻が一定期間経過してるの条件でクエリをかけて表示する。

いずれにしてもあまり効率的でないと思うので、もっと良い方法をご教授いただければと思います。

また、厳しいようでしたら必ずしもFirestoreでなくてもよいので、他のDBでも一度表示した相手を一定期間表示しないことができる設計を教えていただけたらと思います。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「表示したか」がフィルタ設定する度にリセットされていいのであれば(あるいはそもそもフィルタの機能がないなら),
ユーザがフィルタ設定した時に,その人用に表示させていく順番を保存してしまうのはありです.
そうすると,あとはどこまで表示したかだけ保存すれば良く,判定の必要もありません.

上記がダメであれば,①の改変で,表示する時に複数相手を取得する.
そして一度に複数同士で判定して効率化,などでしょうか.
ちなみにmatchedは要らないと思います(lastShowedの有無で代用可).

投稿2018/07/01 22:09

Yatima

総合スコア1159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問