Я создаю приложение для социальной сети, и мне нужно найти подходящий способ структурировать базу данных Cloud Firestore для хранения пользователей. На стороне клиента приложение должно представить панель поиска для поиска и добавления других пользователей. В идеале, когда вы вводите символ в эту строку поиска, пользователи, чьи имена начинаются с введенного символа, должны отображаться и обновляться по мере того, как вы вводите больше символов в строку поиска в режиме реального времени (т. Е. Реализует автозаполнение). Поэтому я пытаюсь найти оптимальный способ хранения пользователей в Firestore, который облегчает этот процесс запросов.
Я думал о том, чтобы хранить полную информацию о каждом пользователе в отдельном документе в пользовательской коллекции (т. Е. Иметь один документ для каждого пользователя). Если бы я реализовал подобное, я мог бы использовать встроенные запросы Firestore через Google Cloud Functions. Однако каждый раз, когда был сделан запрос, тогда встроенные запросы Firestore будут сканировать все пользовательские документы (то есть документ для каждого пользователя будет дорогим и неэффективным, если число пользователей увеличится).
Чтобы быть более экономичным и эффективным, я мог бы иметь отдельную коллекцию (например, коллекцию указателей), в которой каждое имя пользователя и идентификатор для всего пользовательского документа (в пользовательской коллекции) сгруппированы в документы, организованные в алфавитном порядке. Например, у меня мог бы быть один документ для всех имен пользователей, начинающихся с «а», где поля этого документа указывали бы имена и идентификаторы документов для пользовательской коллекции (аналогично для всех других букв). После того, как любой из этих документов для данного письма заполнится (достигнет предела, который решил Google), я мог бы просто добавить к нему подколлекцию для хранения дополнительных имен пользователей и идентификаторов, например, организовав подколлекции на основе первые два символа имени пользователя (например, «aa», «ab», «ac» и т. д.).
В результате я мог бы использовать эти документы в коллекции указателей для быстрого отображения имени пользователя, начиная с заданных символов, на панели поиска, и после выбора конкретного пользователя из него я мог бы использовать идентификатор документа для получения полный пользовательский документ в пользовательской коллекции (поэтому мне не нужно сканировать все пользовательские документы).
Я хотел бы спросить, имеет ли этот тип структурирования данных смысл для представленной проблемы? И есть ли лучший способ сделать это?
Заранее спасибо!