La eficiencia de la búsqueda utilizando whereArrayContains

PleaseNoBugs:

Soy curioso en cuanto a la eficiencia de la búsqueda de documentos en una colección utilizando este código. A medida que el número de documentos en la colección crece y el número de elementos de la matriz crece esta búsqueda será convertido en muy ineficiente? ¿Hay una mejor manera de hacer esto o hay un cambio de esquema que puedo hacer a la base de datos para optimizar mejor esto? ¿Hay algún sitio donde pueda encontrar el tiempo la complejidad de estas funciones para la documentación FireStore tal vez?

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


SOLUCIÓN ALTERNATIVA

Al principio quería probar almacenar los identificadores de grupo bajo el usuario de manera que sólo se agarra los grupos para los que el usuario actual, pero se encontró con problemas y nunca he encontrado una solución para el establecimiento de un FireStoreRecyclerOptions usando varios ID de consulta haciendo.

Ejemplo:

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

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

¿Hay una manera de añadir varias consultas a la FirestoreRecyclerOptions?

Alex Mamo :

A medida que el número de documentos en la colección crece y el número de elementos de la matriz crece esta búsqueda será convertido en muy ineficiente?

El problema no es el hecho de la que la búsqueda será muy ineficaz, el problema es que los documentos tienen límites. Así que hay algunos límites cuando se trata de la cantidad de datos que puede poner en un documento. De acuerdo con la documentación oficial sobre el uso y límites :

Tamaño máximo para un documento: 1 MiB (1.048.576 bytes)

Como se puede ver, está limitado a 1 MiB total de datos en un solo documento. Cuando estamos hablando de almacenar texto, puede almacenar más o menos, pero como sus Getts matriz más grande, tener cuidado con esta limitación.

Si va a almacenar gran cantidad de datos en las matrices y las matrices debe ser actualizada por una gran cantidad de usuarios, hay otra limitación que tiene que cuidar. Por lo que se limitan a 1 de escritura por segundo en cada documento. Así que si usted tiene una situación en la que una gran cantidad de usuarios al todos tratando de escritura de datos / actualización a los mismos documentos a la vez, puede empezar a ver algunos de esto escribe al fracaso. Por lo tanto, tener cuidado con esta limitación también.

Como podrá darse cuenta, consultas en la nube Firestore son muy rápidos y esto es debido Firestore crea automáticamente un índice para cualquier campo que tiene en su documento.

Si usted piensa que usted va a realizar consultas sobre uno de los padres en función de su memeber que contiene una específica de una colección, a continuación, utilizar los mapas y no arrays.

Hay muchos puestos por ahí que digamos que las matrices no funcionan bien en la nube Firestore porque cuando tiene datos que pueden ser alterados por varios clientes, es muy fácil confundirse porque no se puede saber lo que está ocurriendo y en qué campo. Si estoy usando un mapa y los usuarios quieren editar varios campos diferentes, incluso exactamente el mismo campo, por lo general, sabemos lo que está pasando. En un matrices, que son diferentes. Trate de pensar en lo que podría suceder si un usuario desea editar un valor en el índice 0, algún otro usuario desea eliminar el valor en el índice 0 que va a terminar teniendo resultado muy diferente y por qué no, una matriz fuera de límites excepciones. Así Firestore acciones con matrices son un poco diferentes bits. Por lo que no puede realizar acciones como, insertar, actualizar o eliminar a un índice específico. Pero si don' t importa el orden exacto que almacene elemento en una matriz, entonces usted debe utilizar matrices. Firestore añadió hace unos días algunas características para añadir o eliminar elementos específicos, pero sólo si no se preocupan por la posición exacta de ellos. VerAquí documentación oficial.

Como conclusión, poner los datos en el mismo documento si necesita que sea pantalla juntos. Asimismo, no hacerlos tan grande, así que tendrá que descargar más datos que en realidad se necesita. Así que poner los datos en la recolección cuando se quiere buscar individuos campos de los datos o si desea que sus datos tienen espacio para crecer. Deje sus datos como un campo de mapa si quieres que busque sus objeto padre en base a esos datos. Y si tienes objetos que generalmente se utilicen como banderas, seguir adelante con matrices.

Asimismo, no se preocupe acerca de consultas lentas en Firestore.

Supongo que te gusta

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