2016-12-09 3 views
2

これはFirebaseを使用した初めてのAndroidアプリです。データベースの保存について少し心配しています。Firebase - 都市別データベースの構築

ここに問題があります。私はユーザーの投稿を共有するアプリを開発していますが、ユーザーは自分の国や都市の投稿のみを表示するようにしたいと考えています。 Firebaseはデータベースとストレージの使用も考慮に入れているので、世界のすべての記事を自分の街で共有するだけであれば、多くのデータに使うことになります。

世界中の投稿をすべてフィルタリングせずに、自分の周りに投稿された投稿を取得できるようにするには、データベースをどのように構築できますか?これを達成する方法はありますか?彼はすでにこの問題に遭遇している場合、誰かが彼の経験を共有することはできますか?

ありがとうございます!

答えて

1

あなたの問題はパブリッシュ/サブスクライブメッセージングシステムカフカのように。

問題を正しく理解している場合は、アプリケーションユーザーの現在の場所を取得した後、最も近い都市または地域のフィードを取得することができます。現在、この目的に役立つさまざまなツールや技術があります(例:カフカ)。しかし、この問題はFirebase特有のものであり、サーバ側のコーディングは必要ありません。あなたの問題を解決する方法についてはわかりませんが、問題を解決する方法を考えてから、Firebaseの方法でソリューションを複製しようとすることができます。

あなたのアプリケーションの各ユーザーからの投稿がダンプされるチャンネルを考えているかもしれません。各投稿にはそれぞれの場所を識別するキーがあります。ここでは、アプリケーションの各ユーザーを、そのチャネルの特定のトピックを持つサブスクライバと考えてみましょう。任意の加入者(つまり、アプリケーションのユーザー)が来たら、チャネルはその加入者に必要な投稿(近隣の都市の投稿など)を提供します。例えば、我々はキーを備え、そのチャネルでいくつかの記事、NYDhakaKhulnaNJLondonSeoulSydneyなどを持っている

をすることができます今すぐJessoreから誰かが自分のチャンネルに購読しているし、彼のために近所の都市でありますDhakaおよびKhulna。したがって、サブスクライバにはキーDhaka, Khulnaがあり、チャネルがキーを見ると、キーDhakaKhulnaを含む場所を含む投稿が配信されます。

Firebaseでこの動作をどのように達成できますか?それが現時点で直面している課題です。だから、channelノードにすべての場所からのすべての投稿(前述のチャンネルのようなもの)を持たせてみましょう。データ構造の例を次に示します。

channel 
    - post1 
    - content : "this city is beautiful" 
    - location: "Khulna" 
    - post2 
    - content : "This city is okay" 
    - location: "Dhaka" 
    - post3 
    - content : "London, here I come" 
    - location: "London" 
    - post4 
    - content : "leaving the city" 
    - location: "NY" 

は今、あなたがそのテーブルにあなたの現在の街を通過したときに、あなたに最寄りの都市を教えてくれる都市間distance-mappingを、持っている必要があります。あなたは与えられた都市のためのあなた自身の距離のマッピングを見つける必要があります。あなたの現在の都市はJessoreです。距離マッピングテーブルは、最も近い都市を返します(DhakaKhulnaなど)。これは構築するのに複雑なものかもしれません。しかし、いったん関係マッピングが構築されると、それは単に更新する必要があります。たとえば、distance-mapingデータの最終状態は次のようになります。あなたは、ユーザーの現在位置を取得するとき

distance-mapping 
    - Dhaka 
    - Khulna 
    - Jessore 
    - Khulna 
    - Dhaka 
    - Jessore 
    - Jessore 
    - Dhaka 
    - Khulna 
    - Vegas 
    - NY 
    - NY 
    - Boston 
    - Vegas 

さて、あなたは簡単にFirebaseでdistance-mappingテーブルから最寄りの都市を見つけることができます。都市をchannelテーブルに渡して、その特定のキーを持つ投稿を取得します。

Firebaseの複雑なクエリに関するいくつかの回答があります。あなたは、これらから選択されたクエリパラメータを渡すのに役立つかもしれません。

役に立てば幸い!

+0

あなたは完全に私の質問をしているわけではないと思うが、私はあなたが私の問題を理解していると感じ、あなたに私にいくつかのヒントを与えていると感じている。それについて話すためにあなたのメールを受け取ることはできますか?その答えは質問に合っており、私は正しいものとしてそれをチェックすると思うでしょう。 –

1

ユーザーが投稿を投稿すると、キーと値のペアの1つが"location" : "New York, NY"になります。投稿を閲覧しているユーザーが「ニューヨーク、ニューヨーク」にある場合、アプリは「ニューヨーク、ニューヨーク」の投稿をデータベースに問い合わせることができます。私はあなたが知っていると仮定しているか、ユーザーから位置データを取得して一般化する方法を考え出すことができますので、より一般化された "New York、NY"の下で、 "Long Island、NY 「(あなたはそれがより具体的にしたい場合を除きスウィフトで 、コードのようなものが考えられます。

FIRDatabase.database().reference().child("posts").queryOrdered(byChild: "location").queryEqual(toValue: "New York, NY") 

これは、Java(Androidの中で同じ考えでなければなりません)

この場合、データベースその地域のすべての投稿を返信します。「ニューヨーク、ニューヨーク」

+0

私はアメリカでは使いやすく、州が明確に定義されているので、この考え方には納得できません。しかし、どこか別のことを想像してみてください。少し難しいかもしれません。投稿の場所を知り、ユーザーの現在地を知ることで、記事をダウンロードせずに投稿をフィルタリングして距離を判断する方法はありますか? –