嗨,我正在与一家小型初创公司合作,正在构建一个Web应用程序。我们选择的最初技术堆栈是:React JS前端,服务器端用于处理一些外部数据请求的Python,以及Google的Fire-base(实时数据库)作为后端。
我们专门研究了Firebase,这是由于Google工具套件(包括Google Analytics(分析)和大型查询)已记录在案的插件,以及Google Firebase仪表板随附的已提供用户身份验证。
但是,自从与一群开发人员合作以来,在将Firebase与我们的应用程序一起使用时,他们在两个方面提出了担忧。 Firebase已记录了对其支持的搜索深度和复杂性的限制。
对于需要跨表的复杂联接或部分查询或要求类似或类似返回的搜索条件的查询,据说Firebase不具备功能或功能非常有限。
对于用户而言,该产品在构建需要用户组和角色的环境时功能有限。
因此,建议我们考虑远离Firebase。或者,我们考虑将Firebase的使用减少到应用程序环境的简单元素中,将关键数据和通过复杂搜索/数据查询找到并显示的数据转移到对数据和搜索复杂性有更大支持的替代数据库技术上。
为此,我希望了解是否有人在两个Firebase数据库产品(实时db或FireServe)中的任何一个中都有其整个Web应用程序后端,以及您是否遇到过有关性能,功能缺乏的问题,尝试在后端内部执行复杂操作时功能不足。
然后,如果执行了操作,则如何解决该问题。您是使用第三方插件添加到Firebase的,还是将部分或全部数据从Firebase移到了替代数据库技术,或者完全从Firebase移开了?
最后,我想知道是否可以以更有限的方式使用Firebase,例如在关键数据驻留在另一个数据库(例如MongoDB或SQL)中时管理用户对应用程序的访问是否可行,或者我们是否过于复杂利用两种不同的数据库技术来构建基础架构?
感谢任何提供建议的人。邓肯
答案 0 :(得分:0)
这不是一个确切的答案,但阅读注释表明该帖子的一个要求是部分字符串查询。根据评论,这是关注点
一个用户键入“ A1”以尝试搜索他的朋友“ Alex”。 您要获取名称中包含以下内容的数据库中的所有用户 文字“ Al”以帮助用户缩小搜索范围。 该任务不是 可能仅通过Cloud Firestore。
因此,检查一项需求,让我们假设我们要执行该任务;返回名称以“ Al”开头的所有用户
func findPartialString(startingWith: String) {
let usersColl = self.db.collection("users")
let endingWith = startingWith + "\u{f8ff}"
let query = usersColl.whereField("name", isGreaterThanOrEqualTo: startingWith).whereField("name", isLessThan: endingWith)
query.getDocuments { querySnapshot, err in
if let err = err {
print("there was an error: \(err.localizedDescription)")
return
}
if let snap = querySnapshot {
if snap.count > 0 {
for document in snap.documents {
let key = document.documentID
let name = document.get("name") as! String
print(key, name)
}
} else {
print("no matches")
}
} else {
print("no data returned in snapshot")
}
}
}
并且会这样称呼
findPartialString(startingWith: "Al")
结果是
uid_5 Alex
uid_4 Albert
还有几种其他方法可以执行同一任务,因此很显然,不仅很有可能,而且它是易于维护的紧凑代码。