9

Firebase 最近发布了与 Cloud Functions 的集成,允许我们上传 Javascript 函数来运行,而无需我们自己的服务器。

是否可以使用这些功能构建搜索引擎?我的想法是使用本地磁盘(tmpfs 卷)将索引数据保存在内存中,并且对于每个写入事件,我都会索引新数据。tmpfs 是否在函数调用(实例)之间保留数据?

是否可以为此目的使用云功能,或者我应该使用专用服务器来索引数据?

与此相关的另一个问题是:当云函数从 Firebase 实时数据库中获取数据时,它是消耗网络还是只是磁盘读取?它在定价中是如何计算的?

谢谢

4

2 回答 2

10

你当然可以试试。Cloud Functions 有一个本地文件系统,通常用于在运行期间维护状态。有关更多信息,请参阅此答案:从 Google Cloud Function 写入临时文件

但是(据我所知)不能保证在您的函数运行之间保持状态。甚至下次该函数将在同一个容器上运行。下次您可能会在新创建的容器上运行。或者当调用出现高峰时,您的函数可能同时在多个容器上运行。因此,您可能必须为函数的每次运行重建搜索索引。

相反,我会考虑集成外部专用搜索引擎,例如本示例中的 Algolia:https ://github.com/firebase/functions-samples/tree/master/fulltext-search 。看看代码:即使有注释和许可证,它也只有 55 行!

或者,您可以找到一个持久性存储服务(Firebase 数据库和 Firebase 存储是两个示例)并使用它来持久化搜索索引。因此,您将运行代码以更新 Cloud Functions 中的搜索索引,但会将生成的索引文件存储在更持久的位置。

于 2017-03-10T15:43:43.617 回答
4

GCF 团队成员 + 前谷歌搜索成员。Cloud Functions 不适合内存搜索引擎有几个原因。

  1. 搜索引擎将其索引和服务机器分开是非常明智的。在规模上,您需要担心以不同方式读取和写入热点。

  2. 正如弗兰克所暗示的那样,您不能保证在多个请求中获得相同的实例。我想加强他的担忧:你永远不会在两个不同的云函数中获得相同的实例。每个 Cloud Functions 都有自己的后端基础架构,可以独立配置和扩展。

我知道削减依赖项很诱人,但削减持久性存储不是办法。您的服务层可以使用缓存来加速请求,但持久存储可确保您在云函数崩溃或部署更新时不必重新索引整个语料库(每个都保证整个实例被废弃并重新创建)。

于 2017-03-12T20:51:49.807 回答