2016-05-30 6 views
0

Webサービスにクエリを行うPHPスクリプトがあります。このクエリの結果をFirebaseリアルタイムデータベースの行に挿入します。このfirebaseデータベースは、Androidアプリによる変更を監視しています。Firebaseのデータを圧縮する

1行あたりのテキストの量は、しばしば800KBになることがありますので、私はこれを圧縮したいと思います。さもなければ、私のアプリはOnDataChangedイベントが起こる前に800Kbをダウンロードする必要があります。

(PHPスクリプトで)次のように私がやっていること

は、私は800KBの文字列は、Webサービスを構成受け入れるです。 それから、PHPスクリプトでGzipを実行します。 その結果、私はBase64_Encodeを使用し、これをFirebaseに挿入します。

正常に動作しているようですが、90%の圧縮率を得ているようです。つまり、800Kbではなく80Kbしか挿入されません。しかし、これを行うには、 "ラウンドハウス"の方法です。

これを行うより良い方法はありますか?確かにそこにあるはずです。 FirebaseがGZipを取得する方法はありますか?文字列は私のアプリに送信していますか?その後、すべてのアプリケーションがFirebase SDKを使用しています。ここで

$compressed_gzipjson = gzencode($jsonresponse, 9); 

$firebase->set(DEFAULT_PATH . '/' , base64_encode($compressed_gzipjson)); 

何かアドバイスは非常に確かに歓迎... Firebaseへの書き込みをPHPコードです。

+0

わずかな補正で、780KBは110Kbに圧縮されますが、それでもかなり良いです。 – JohnMoll

+0

コメントに修正を加える代わりに、あなたの質問の下にある[edit](http://stackoverflow.com/posts/37534908/edit)リンクをクリックすれば修正できます。 –

答えて

1

これは、リアルタイムデータベースの非常に無駄な使用のように思えます。 Firebaseデータベースは、小さな構造化(JSON)データの同期に最適なツールです。構造化されていないデータには理想的ではなく、テキストをgzipしても構わないということは、構造を同期させる必要がないということです。

テキストを安価なファイル保存メカニズム(Firebase Storageなど)に保存するだけの理由はありますか?その後、ファイルのURLをFirebaseデータベースに保存し、それをクライアントに同期させます。

+0

この情報は5〜6分ごとに変更され、Androidクライアントのニュースは毎回通知されます。ファイルの内容が変更された場合、Firebase StorageオプションがAndroidクライアントに変更されますか? – JohnMoll

+0

@ JohnMoll、Firebase Storageにはリアルタイム通知がありませんが、リアルタイムDBを使用してクライアントにStorageからファイルをダウンロードするよう通知することができます。 –

+0

私は今何をしていますか?それはうまくいっています、私はこのメソッドにコミットする前に、より良い方法がないことを確認したいですか? – JohnMoll