Menu Docs
Página inicial do Docs
/ /

Integre o MongoDB com o Feast

O Feast fornece uma API FeatureStore de alto nível que permite definir feições e grupos de feições ( visualizações defeições), armazenamento online e offline e a capacidade de mover dinamicamente dados do armazenamento offline para o online (materialização). A integração do MongoDB permite que você use o MongoDB como uma loja online e offline para o Feast, para que você possa definir os recursos uma vez e servi-los consistentemente por meio do treinamento de modelos e da inferência online sem manter sistemas de armazenamento separados.

O modelo de documento flexível e o MQL do MongoDB permitem que ele lide com os padrões de query complexos necessários para o armazenamento offline. Para a loja online, o MongoDB é otimizado para padrões de acesso em escala web – leituras/gravações rápidas, dimensionamento horizontal e esquemas flexíveis que minimizam junções e idas e voltas.

Nesta visão geral da integração, você pode encontrar:

  • Uma introdução ao MongoDB como a loja online e offline da Feast.

  • Como os conceitos de Feast são mapeados para o MongoDB.

  • Explicações detalhadas dos projetos de loja offline e online do MongoDB .

  • Exemplos de configuração para configurar as lojas MongoDB no Feast.

  • A loja online é um armazenamento de valores-chave apoiado por uma única coleção do MongoDB , otimizado para recuperação de baixa latência dos recursos mais recentes por entidade durante a inferência online.

  • A loja offline é uma camada de computação e tradução que query linhas de dados históricos de funcionalidades armazenados em uma collection do MongoDB (normalmente chamada) para conjuntos de dados feature_history de treinamento, pontuação e materialização (promoção de dados para o armazenamento online).

Um fluxo de trabalho típico de ponta a ponta é assim:

  1. Defina entidades, visualizações de recursos e fontes de dados que ponto para coleções apoiadas MongoDB.

  2. A ingestão de dados de funcionalidades no armazenamento offline por meio do offline_write_batch, que aceita uma tabela PyArrow como entrada e insere os dados na coleção feature_history MongoDB seguindo o esquema do armazenamento offline.

  3. Gere dados de treinamento usando o get_historical_features, que executa uma conexão eficiente de ponto no tempo em linhas de recursos históricos armazenadas no MongoDB.

  4. Materialize os valores de funcionalidades mais recentes da loja offline para a loja online usando pull_latest_from_table_or_query e online_write_batch.

  5. Disponibilize recursos online por meio das APIs online do Feast, que leem de uma única coleção do MongoDB chaveada por uma chave de entidade serializada.

A integração do MongoDB segue o modelo conceitual padrão da Feast, mas mapeia essas abstrações para um esquema do MongoDB projetado para documentos online focados em entidades e eventos históricos somente para anexar.

Conceito de festividade
Role na festividade
Representação do MongoDB

Entidade

objeto de domínio que os recursos descrevem (por exemplo, motorista, usuário).

Codificado em uma chave de entidade serializada; armazenado como _id na loja online e entity_id na loja offline.

Chave de acesso

Coluna(s) usada(s) para identificar uma linha de entidade em um dataframe.

Distribuído em serialize_entity_key; os bytes resultantes são usados como identificador de entidade no MongoDB.

Chave de entidade serializada

Codificação binária determinística de nomes e valores de chave de junção.

On-line: _id: serialized_entity_key (chave primária). Offline: entity_id: Binary(...) campo em feature_history documentos.

funcionalidade

Medição nomeada e digitada em um ponto no tempo.

Um campo dentro do subdocumento features (offline) ou features.<feature_view>.<feature_name> (online).

FeatureView

Vincula feições a entidades, fonte de dados e TTL; unidade de organização.

Offline: feature_view string discriminadora em cada documento histórico. Online: grupos aninhados em features.<feature_view> e registros de data/hora por FV em event_timestamps.

DataSource

Ponteiro de metadados para onde as características históricas ao vivo.

MongoDBSource apontando para uma collection MongoDB (database, collection, connection_string) mais timestamps.

OfflineStore

Interface de leitura/gravação para recursos históricos e entradas de PIT.

MongoDBOfflineStore implementação que executa agregações MQL em uma coleção de feature_history compartilhada com um índice composto.

OnlineStore

Armazenamento de baixa latência dos valores de recursos mais recentes por entidade.

Collection única do MongoDB de documentos de entidade chaveados por _id = serialized_entity_key, com subdocumentos features e event_timestamps aninhados.

TTL

Janela de atualização no nível do FeatureView.

Aplicado em queries offline e pós-filtragem do Python ao calcular funcionalidades históricas; também pode ser combinado com created_timestamp ou updated_at em índices.

FeatureService

Lista nomeada de referências de recursos para um modelo.

Nenhuma representação direta do MongoDB ; usado pelo Feast para decidir quais features.<feature_view>.<feature_name> caminhos ler da loja online.

Registro

Armazenamento de metadados para entidades, visualizações de recursos e serviços.

Inalterado; A integração do MongoDB não substitui o registro Feast.

RetrievalJob

Tabelas de recursos de retorno do wrapper de execução adiada.

Para a loja offline do MongoDB , encapsula uma agregação MQL e expõe exportações de setas apoiadas pela conversão de cursor para seta.

Materialização

Propagação programada dos recursos offline mais recentes na loja online.

Implementado via pull_latest_from_table_or_query sobre feature_history e depois online_write_batch na coleção MongoDB online.

O armazenamento offline do MongoDB usa uma única coleção compartilhada (por padrão feature_history) que armazena linhas de recursos históricos somente anexados para todas as visualizações de recursos.

Cada documento representa uma observação de uma entidade para um FeatureView em um registro de data/hora de evento específico:

{
"entity_id": "Binary(...)",
"feature_view": "driver_stats",
"event_timestamp": "ISODate(2024-01-15T12:00:00Z)",
"created_at": "ISODate(2024-01-15T12:01:00Z)",
"features": {
"conv_rate": 0.72,
"acc_rate": 0.91,
"avg_daily_trips": 14
}
}

Propriedades principais:

  • Somente anexar: os dados históricos são tratados como imutáveis; as correções são escritas como novas linhas com registros de data/hora created_at mais recentes em vez de atualizações no local.

  • Compatível com séries temporais: event_timestamp representa quando o valor do recurso foi observado; created_at é usado como desempate quando várias observações compartilham o mesmo carimbo de data/hora do evento .

  • Agrupamento de recursos por FeatureView: feature_view identifica a qual FeatureView a linha pertence, de modo que uma única coleção possa hospedar vários FVs.

Um único índice composto suporta todos os principais padrões de query:

(entity_id ASC, feature_view ASC, event_timestamp DESC, created_at DESC)

Esse índice permite varreduras de intervalo eficientes sobre entidades e visualizações de recursos, enquanto garante que a observação mais recente por (entity_id, feature_view) seja vista primeiro durante a agregação.

A loja offline do MongoDB implementa a interface de loja offline padrão do Feast:

  • offline_write_batch - Grava um pyarrow.Table dos dados de funcionalidades na collection subjacente do MongoDB , usando os metadados MongoDBSource configurados para determinar connection_string, database e collection.

  • get_historical_features - Dado um entity_df de entidades e registros de data/hora de evento , além de um conjunto de FeatureViews, retorna uma tabela ampliada em que cada linha inclui valores de recursos corretos point-in-time: para cada par (entity_id, event_timestamp), o valor de recurso mais recente cujo event_timestamp <= entity_event_timestamp e dentro de TTL estiver selecionado.

  • pull_latest_from_table_or_query - Retorna uma linha por entidade contendo os valores de funcionalidade mais recentes em uma janela de tempo, usada pelo mecanismo de materialização do Feast para semear a loja online.

  • pull_all_from_table_or_query - Recupera todas as linhas de uma fonte de dados em um intervalo de datas especificado para exportação ou inspeção, apoiado pelo mesmo esquema e índice do feature_history.

  • persist (via RetrievalJob.persist) - Grava o resultado de uma query de recurso histórico em uma coleção separada ou coletor externo via SavedDatasetStorage, distinto de feature_history.

A implementação offline recomendada é o armazenamento offline do MongoDB baseado em aggregation, denominado MongoDBOfflineStore.

Características principais:

  • Utiliza uma única coleção feature_history compartilhada por todos os FeatureViews, distinguidos por feature_view.

  • Confia no índice composto (entity_id, feature_view, event_timestamp, created_at) para todas as queries, evitando varreduras completas da coleção.

  • Usa o $group $first do lado do servidor para cargas de trabalho de "pontuação" (uma linha por entidade) e pd.merge_asof para cargas de trabalho de "treinamento" com IDs de entidade repetidas, equilibrando correção e desempenho.

  • Uso de memória limitada por meio de agrupamento, portanto, valores entity_df grandes podem ser processados sem esgotar a RAM.

Os benchmarks mostram que essa implementação fornece a melhor combinação de taxa de transferência e eficiência de memória em comparação com abordagens offline alternativas do MongoDB .

Capacidade
Suportado?
Notas

get_historical_features (entrada do PIT)

Sim

Implementado via MongoDBOfflineStore usando aggregations indexadas e Pandas merge-asof.

pull_latest_from_table_or_query

Sim

Usa $match + $sort + $group $first sobre (entity_id, feature_view, event_timestamp, created_at).

pull_all_from_table_or_query

Sim

Varredura histórica completa com filtros de tempo acima de feature_history.

offline_write_batch

Sim

Escreve tabelas de seta no MongoDB através do MongoDBSource configurado.

persist

Sim

Exporta resultados históricos da query para uma collection separada usando SavedDatasetStorage.

Conveniências adicionais, como exportar diretamente para data lakes ou armazéns, dependem da implementação específica do RetrievalJob e espera-se que siga os padrões padrão da Feast para armazenamentos offline.

A loja online MongoDB usa uma única coleção para todos os FeatureViews, codificados pela chave de entidade serializada.

  • _id: serialized_entity_key(entity_key), produzido pela função de codificação estável do Feast que classifica os nomes e valores das entidades e os codifica em bytes.

  • features: subdocumento aninhado onde cada FeatureView mantém seu próprio namespace de funcionalidade .

  • event_timestamps: carimbos de data/hora por FeatureView que indicam quando o valor mais recente para esse FeatureView foi gravado.

  • created_timestamp ou updated_at: campos de contabilidade úteis para indexação e diagnóstico de TTL.

Exemplo (simplificado):

{
"_id": "b\"<serialized_entity_key>\"",
"features": {
"driver_stats": {
"rating": 4.91,
"trips_last_7d": 132
},
"pricing": {
"surge_multiplier": 1.2
}
},
"event_timestamps": {
"driver_stats": "ISODate(2026-01-01T12:00:00Z)",
"pricing": "ISODate(2026-01-21T12:00:00Z)"
},
"created_timestamp": "ISODate(2026-01-21T12:00:00Z)"
}

Fundamento do design:

  • Uma única collection mantém o estado de cada entidade em um documento, o que corresponde à expectativa do Feast de pesquisas baseadas em chaves e evita a fragmentação do estado nas collections por FeatureView.

  • O uso da chave de entidade serializada como _id reutiliza a codificação determinística do Feast, evita chaves primárias duplicadas entre collections e mantém a recuperação para uma única pesquisa de chave por entidade.

A loja online do MongoDB implementa a API de loja online padrão da Feast:

  • online_write_batch - Durante a materialização, o Feast grava os valores de funcionalidade mais recentes para cada entidade nos documentos do MongoDB . Cada upsert de lote atualiza somente o subdocumento features.<feature_view> aninhado relevante e sua entrada correspondente em event_timestamps, mantendo os documentos da entidade atômicos e consistentes.

  • online_read e get_online_features - A entrega online resolve as chaves de entidade em valores _id usando a mesma lógica de serialização que offline e, em seguida, realiza pesquisas de chaves. Cada pesquisa retorna todas as feições solicitadas para a entidade em uma única viagem de ida e volta, aproveitando a estrutura features aninhada.

  • TTL e atualização — O recurso TTL é configurado no FeatureView e usado principalmente em junções de PIT offline; O TTL online pode ser implementado com um índice em updated_at ou registro de data e hora semelhante, consistente com a noção da Feast de que as lojas offline são somente para anexação, enquanto as lojas online mantêm o estado mais recente.

O armazenamento offline é configurado usando MongoDBOfflineStoreConfig:

class MongoDBOfflineStoreConfig(FeastConfigBaseModel):
type: str = "...MongoDBOfflineStore"
connection_string: str = "mongodb://localhost:27017"
database: str = "feast"
collection: str = "feature_history"

Exemplo feature_store.yaml:

offline_store:
type: feast.infra.offline_stores.contrib.mongodb_offline_store.mongodb.MongoDBOfflineStore
connection_string: "mongodb+srv://user:pass@cluster.mongodb.net"
database: feast
collection: feature_history

MongoDBSource é o DataSource correspondente. Seu name campo se torna o feature_view discriminador armazenado em todos os documento. Para obter opções de configuração completas, consulte a referência da Fonte de Dados do MongoDB nos documentos do Feast.

source = MongoDBSource(
name="driver_stats",
timestamp_field="event_timestamp",
created_timestamp_column="created_at",
)

Voltar

Crie um agente de IA