Eficiência de pesquisar usando whereArrayContains

PleaseNoBugs:

Estou curioso para saber a eficiência da pesquisa de documentos em uma coleção usando este código. Como o número de documentos na coleção cresce e o número de itens na matriz cresce vai esta busca tornar-se muito ineficiente? não há uma maneira melhor de fazer isso ou é uma alteração de esquema que eu posso fazer para o banco de dados para melhor otimizar esse? Existe algum lugar que eu possa encontrar a complexidade de tempo dessas funções para a documentação firestore talvez?

Query query = db.collection("groups").whereArrayContains("members", userid);


SOLUÇÃO ALTERNATIVA

Originalmente, eu queria tentar armazenar os ids de grupo sob o utilizador, de modo a única agarrar os grupos para que o usuário atual, mas funcionou em problemas e nunca encontrou uma solução para definir uma FireStoreRecyclerOptions usando vários ids para consulta.

Exemplo:

for(String groupid : list) {
    Query query = db.collection("test-groups").document(groupid);

    FirestoreRecyclerOptions<GroupResponse> response = new FirestoreRecyclerOptions.Builder<GroupResponse>()
            .setQuery(query, GroupResponse.class)
            .build();
}

Existe uma maneira de adicionar várias consultas para o FirestoreRecyclerOptions?

Alex Mamo:

Como o número de documentos na coleção cresce e o número de itens na matriz cresce vai esta busca tornar-se muito ineficiente?

O problema não é o fato do que a pesquisa vai se tornar muito ineficiente, o problema é que os documentos têm limites. Portanto, há alguns limites quando se trata de quantos dados você pode colocar em um documento. Segundo a documentação oficial sobre a utilização e limites :

O tamanho máximo de um documento: 1 MIB (1.048.576 bytes)

Como você pode ver, você está limitado a 1 MiB total de dados em um único documento. Quando estamos a falar sobre o armazenamento de texto, você pode armazenar praticamente mas como seus Getts matriz maior, ter cuidado com esta limitação.

Se você estiver armazenando grande quantidade de dados em matrizes e essas matrizes deve ser atualizado por muitos usuários, não há outra limitação que você precisa para cuidar. Então, você está limitado a 1 de gravação por segundo em cada documento. Então se você tem uma situação em que um monte de usuários al todos tentando de dados de escrita / atualização para os mesmos documentos de uma só vez, você pode começar a ver algumas destas gravações para falhar. Então, cuidado sobre essa limitação também.

Como você deve ter notado, consultas em Nuvem Firestore são muito rápidos e isso é porque Firestore cria automaticamente um índice para todos os campos que você tem em seu documento.

Se você acha que você estará consultando para um pai com base no seu contendo uma memeber específico de uma coleção, em seguida, usar mapas e não matrizes.

Há muitos lugares lá fora que dizem que as matrizes não funcionam bem em Nuvem Firestore porque quando você tem dados que podem ser alterados por vários clientes, é muito fácil ficar confuso porque você não pode saber o que está acontecendo e em que campo. Se eu estou usando um mapa e os usuários querem editar vários campos diferentes, até mesmo o exato mesmo campo, nós geralmente sabem o que está acontecendo. Em um matrizes, coisa são diferentes. Tente pensar no que poderia acontecer se um usuário quiser editar um valor no índice 0, algum outro usuário deseja excluir o valor no índice 0, você vai acabar tendo resultado muito diferente e porque não, matriz fora dos limites exceções. Então Firestore ações com matrizes são um pouco diferentes. Então você não pode executar ações como, inserção, atualização ou excluir em um índice específico. Mas se don' t preocupam com a ordem exata que você armazene elemento em uma matriz, então você deve usar matrizes. Firestore acrescentou alguns dias atrás algumas características para adicionar ou remover elementos específicos, mas apenas se não se preocupam com a posição exata deles. Vejoaqui documentação oficial.

Como conclusão, colocar os dados no mesmo documento somente se você precisar dele para ser exibi-lo juntos. Também não torná-los tão grande assim que você vai precisar fazer o download de mais dados que você realmente precisa. Então, colocar os dados na coleção quando você quer procurar indivíduos campos de que os dados ou se você deseja que seus dados têm espaço para crescer. Deixe seus dados como um campo de mapa se você quiser seach seu objeto pai com base nesses dados. E se você tem itens que geralmente usá-los como bandeiras, ir em frente com matrizes.

Também não se preocupe com consultas lentas em Firestore.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=179476&siteId=1
Recomendado
Clasificación