2016-05-30 132 views
0

我有一个PHP脚本,用于查询web服务。我希望将此查询的结果插入到Firebase实时数据库的一行中。然后,这个Firebase数据库将被Android应用程序监视更改。在Firebase中压缩数据

每行文本的数量通常可能是800 Kb,所以我想压缩它。否则,在OnDataChanged事件发生之前,我的应用程序需要下载800 Kb。

我所做的是(在PHP脚本)

遵循我接受800KB串形成的Web服务。 然后我在PHP脚本中运行GZip。 结果,我使用Base64_Encode,这就是我将结果插入到Firebase的结果。

它似乎工作正常,我似乎得到约90%的压缩,意味着只插入80Kb而不是800Kb。然而,这是一个“圆屋”的方式来做到这一点。

有没有更好的方法来做到这一点?当然必须有。有没有什么办法让Firebase转换为GZip字符串发送给我的应用程序?在所有应用程序使用Firebase SDK之后。

这里是PHP代码写入到火力地堡......

$compressed_gzipjson = gzencode($jsonresponse, 9); 

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

任何意见非常欢迎的确。

+0

稍微修正,780KB压缩到110Kb,还是不错的。 – JohnMoll

+0

而不是在评论中添加更正,单击您的问题下的[编辑](http://stackoverflow.com/posts/37534908/edit)链接,您可以修复它。 –

回答

1

这听起来像是一个令人难以置信的浪费使用实时数据库。 Firebase数据库是同步小型结构化(JSON)数据的绝佳工具。它不适合非结构化数据,而且您可以使用文本格式来表示无需同步结构。

为什么不简单地将文本存储在更便宜的文件存储机制(如Firebase Storage)中?然后将文件的URL存储在Firebase数据库中,并通过这种方式将其同步到客户端。

+0

这些信息将每五六分钟更新一次,Android客户端每次都会通知新闻。当文件内容改变时,Firebase存储选项会触发对Android客户端的更改吗? – JohnMoll

+0

@JohnMoll,虽然Firebase存储没有实时通知,但您可以使用Realtime DB通知客户端从存储下载文件。 –

+0

现在我在做什么有什么不对吗?它工作正常,我只是想确保没有更好的方式之前,我承诺这种方法? – JohnMoll