我可以将 Firebase Cloud Functions 用于搜索引擎吗?
Can I use Firebase Cloud Functions for search engine?
Firebase 最近发布了与 Cloud Functions 的集成,使我们能够将 Javascript 函数上传到 运行,而无需我们自己的服务器。
是否可以使用这些功能构建搜索引擎?我的想法是使用本地磁盘(tmpfs 卷)将索引数据保存在内存中,并且对于每个写入事件,我都会索引新数据。 tmpfs 是否在函数调用(实例)之间保留数据?
云函数可以用于此目的还是我应该使用专用服务器来索引数据?
与此相关的另一个问题是:当云功能从Firebase实时数据库获取数据时,它会消耗网络还是只读取磁盘? princing是怎么计算的?
谢谢
你当然可以试试。 Cloud Functions 有一个本地文件系统,通常用于在 运行 期间维护状态。有关更多信息,请参阅此答案:
但是(据我所知)不能保证在您的函数 运行 之间保持状态。甚至下次该功能将 运行 宁在同一个容器上。下次您可能 运行 正在使用新创建的容器。或者当调用激增时,您的函数可能 运行 同时在多个容器上运行。因此,您可能必须为函数的每个 运行 重建搜索索引。
我会考虑集成外部专用搜索引擎,例如本例中的 Algolia:https://github.com/firebase/functions-samples/tree/master/fulltext-search。看看代码:即使有注释和许可也只有 55 行!
或者,您可以找到持久性存储服务(Firebase 数据库和 Firebase 存储是两个示例)并使用它来持久化搜索索引。因此,您需要 运行 代码来更新 Cloud Functions 中的搜索索引,但会将生成的索引文件存储在更持久的位置。
GCF 团队成员 + 前 google 搜索成员。出于某些原因,云函数不适合内存搜索引擎。
搜索引擎将其索引和服务机器分开是非常明智的。在规模上,您需要以不同的方式担心读写热点。
正如 Frank 提到的,您不能保证在多个请求中获得相同的实例。我想强调他的担忧:您 永远不会 跨两个不同的 Cloud Functions 获得相同的实例。每个 Cloud Functions 都有自己的后端基础设施,可以独立配置和扩展。
我知道削减依赖性很诱人,但削减持久性存储不是办法。您的服务层可以使用缓存来加速请求,但持久存储可确保您不必在 Cloud Function 崩溃或部署更新时重新索引整个语料库(每个都保证整个实例被废弃并重新创建)。
Firebase 最近发布了与 Cloud Functions 的集成,使我们能够将 Javascript 函数上传到 运行,而无需我们自己的服务器。
是否可以使用这些功能构建搜索引擎?我的想法是使用本地磁盘(tmpfs 卷)将索引数据保存在内存中,并且对于每个写入事件,我都会索引新数据。 tmpfs 是否在函数调用(实例)之间保留数据?
云函数可以用于此目的还是我应该使用专用服务器来索引数据?
与此相关的另一个问题是:当云功能从Firebase实时数据库获取数据时,它会消耗网络还是只读取磁盘? princing是怎么计算的?
谢谢
你当然可以试试。 Cloud Functions 有一个本地文件系统,通常用于在 运行 期间维护状态。有关更多信息,请参阅此答案:
但是(据我所知)不能保证在您的函数 运行 之间保持状态。甚至下次该功能将 运行 宁在同一个容器上。下次您可能 运行 正在使用新创建的容器。或者当调用激增时,您的函数可能 运行 同时在多个容器上运行。因此,您可能必须为函数的每个 运行 重建搜索索引。
我会考虑集成外部专用搜索引擎,例如本例中的 Algolia:https://github.com/firebase/functions-samples/tree/master/fulltext-search。看看代码:即使有注释和许可也只有 55 行!
或者,您可以找到持久性存储服务(Firebase 数据库和 Firebase 存储是两个示例)并使用它来持久化搜索索引。因此,您需要 运行 代码来更新 Cloud Functions 中的搜索索引,但会将生成的索引文件存储在更持久的位置。
GCF 团队成员 + 前 google 搜索成员。出于某些原因,云函数不适合内存搜索引擎。
搜索引擎将其索引和服务机器分开是非常明智的。在规模上,您需要以不同的方式担心读写热点。
正如 Frank 提到的,您不能保证在多个请求中获得相同的实例。我想强调他的担忧:您 永远不会 跨两个不同的 Cloud Functions 获得相同的实例。每个 Cloud Functions 都有自己的后端基础设施,可以独立配置和扩展。
我知道削减依赖性很诱人,但削减持久性存储不是办法。您的服务层可以使用缓存来加速请求,但持久存储可确保您不必在 Cloud Function 崩溃或部署更新时重新索引整个语料库(每个都保证整个实例被废弃并重新创建)。