Firestore com dados superior a 1Mb?

0

Pergunta

Eu estou usando Firebase para armazenar artigos escritos pelo meu blog, e esses artigos podem ser mais do que 1 Mb de conteúdo.

Eu sei que o Firestore limita o tamanho do documento para 1 MiB e eu estou tentando descobrir uma maneira de contornar isso.

Eu vi esse post no Stackoverflow , mas isso não se aplica aqui porque ela está relacionada a uma lista de itens a ser muito grande.

Minha idéia inicial era para armazenar o conteúdo no Armazenamento na Nuvem em vez disso, e, ao carregar o documento do artigo, se o conteúdo começa com gs://, gostaria de carregar o documento do depósito, e defina-o para "conteúdo" diretamente, mas eu tenho medo de que isso vai ser muito lenta.

Como posso implementar uma forma de armazenar mais de 1 MiB conteúdo em Firestore?

2

Melhor resposta

2

Minha regra de ouro é usar o Firestore apenas para dados estruturados que você deseja consultar, em um caso de uso, tais como o seu.

Os outros dados que eu tinha, de fato, colocar em Nuvem de Armazenamento de arquivos que, em seguida, associar o documento (e.g. utilizando o mesmo ID, ou armazenando o caminho em um campo).

Se você precisa ouvir em tempo real as atualizações para os dados no arquivo de Armazenamento, atualização de um campo no documento (por exemplo, lastUpdated) depois de gravar uma atualização para Armazenamento - para notificar os ouvintes de que eles precisam para recarregar os dados do Armazenamento também.


A única alternativa que eu tenho usado é a sobrecarga de dados para documentos com uma IDENTIFICAÇÃO seqüencial sufixo (então, basta adicionar -1, -2, etc., para a IDENTIFICAÇÃO do documento), mas que foi apenas em casos onde eu quero consultar o documento IDs (em vez de campos de lá) e precisa ter um ouvinte em tempo real sobre o conteúdo dos documentos.

2021-11-23 18:09:12
1

Eu, pessoalmente, respondeu a essa pergunta, e sim, refere-se a uma lista de itens. No seu caso, se um artigo contiver texto, bem como fotos, eu vou, de fato, adicionar todas as imagens para a Firebase de Armazenamento e o texto para o Firestore, e vinculá-los como já @FrankvanPuffelen mencionado na sua resposta. Além de que, como @ToddKerpelman estados a seguinte resposta:

Não adicionar imagens para o Firestore. Armazenamento em nuvem é destinado para isso.

Pensando sobre o seu caso de uso, para obter "mais" que limitação, há outro (semelhante) de abordagem. Em vez de tentar salvar todos os dados em um único documento, eu gostaria de adicioná-lo para vários documentos como este:

Firestore-root
  |
  --- articles (collection)
        |
        --- $articleId (document)
             |
             --- articleParts (collection)
                    |
                    --- $firestoreRandomId
                    |      |
                    |      --- text: "Text of the article"
                    |      |
                    |      --- part: 1
                    |      |
                    |      --- articleId: $articleId
                    |
                    --- $firestoreRandomId
                           |
                           --- text: "Remaining text of the article"
                           |
                           --- part: 2
                           |
                           --- articleId: $articleId

E como você pode ver, cada artigo é composto de várias partes. Para obter todos os artigos da base de dados para criar um collectionGroup de consulta, que se parecem com isto:

db.collectionGroup("articleParts");

Para ler cada artigo individualmente, basta concatenar todas as peças para cada artigo de acordo com o articleId e o número de peça.

Por outro lado, se você só quer ler um único artigo, criar uma referência que aponta para:

db.collection("allArticles").document($articleId).collection("articleParts");

E fazer a mesma operação acima.

Ou você pode usar:

db.collectionGroup("articleParts").whereEqualTo("articleId", someId);

Mas aqui, não se esqueça de criar um índice.

Desta forma, você pode criar quantos documentos quiser para um único artigo. Para o Android, eu criei uma biblioteca chamada FirestoreDocument-o Android, que irá ajudá-lo sempre verifique o tamanho de um documento contra o máximo de 1 MiB (1.048.576 bytes) de cota. Então, se o artigo for maior do que a limitação máxima, dividir o artigo e adicionar o conteúdo de vários documentos.

2021-11-24 08:56:17

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................