Google Firebase касается и смешивания технологий баз данных в веб-приложении - PullRequest
0 голосов
/ 26 апреля 2019

Привет, я работаю с небольшим стартапом, который создает веб-приложение.Первоначальный технологический стек, который мы выбрали, был интерфейсом React JS, Python на стороне сервера для обработки некоторых запросов внешних данных и Googles Fire-base (база данных в реальном времени) в качестве серверной части.

Мы специально рассмотрели Firebase из-за задокументированных плагинов для набора инструментов Google, включая аналитику Google и большой запрос, а также уже предоставленной аутентификации пользователей, которая поставляется вместе с панелью мониторинга Google Firebase.

Однако с момента привлечения группыразработчиков выразили озабоченность в двух областях при использовании Firebase с нашим приложением.Firebase имеет задокументированные ограничения в отношении глубины и сложности поиска, которые он поддерживает.

В том случае, если для запросов, требующих сложных объединений между таблицами или критериев поиска, которые являются частичными или требующими возврата аналогичного или LIKE, о Firebase говорят либоне имеют никаких возможностей или имеют очень ограниченные возможности.

в отношении пользователей продукт, как говорят, имеет ограниченные возможности при создании среды, требующей групп пользователей и ролей.

Поэтому было предложено посмотретьпри отходе от Firebase.Или же мы рассматриваем сокращение использования Firebase для упрощения элементов нашей прикладной среды, перемещения критических данных и данных, которые обнаруживаются и отображаются посредством сложных запросов поиска / данных, в альтернативные технологии баз данных, которые имеют большую поддержку данных и сложности поиска.

Для этого я хочу выяснить, есть ли у кого-либо еще весь веб-приложение в одной из двух баз данных Firebase (в реальном времени или в FireServe), и если у вас возникли проблемы с производительностью, отсутствием функциональностиотсутствие возможностей при попытке сделать сложные вещи в вашем бэк-энде.

Тогда, если вы сделали, как вы решили проблему.Добавили ли вы в Firebase сторонние плагины, перенесли часть или все ваши данные с Firebase на альтернативные технологии баз данных или полностью отошли от Firebase?

И, наконец, я хотел бы знать, еслииспользование Firebase более ограниченным образом, например, для управления доступом пользователей к вашему приложению, когда критические данные находятся в другой базе данных (например, MongoDB или SQL), возможно, или мы чрезмерно усложняем построение инфраструктуры, используя две разные технологии базы данных?

Спасибо всем, кто предлагает свои советы.Дункан

1 Ответ

0 голосов
/ 29 апреля 2019

Это не совсем ответ, но чтение комментариев показывает, что одним из требований поста был частичный строковый запрос. Согласно комментарию, это беспокойство

Один пользователь печатает «Al», пытаясь найти своего друга «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

Есть несколько других способов выполнить эту же задачу, поэтому очевидно, что не только очень возможно , но и компактный код, который легко поддерживать.

...