Transmitir dados para o Atlas - Node.js SDK
Nesta página
Você pode usar aingestão de dados para transmitir dados do aplicação cliente para um Atlas App Services habilitado para Flexible Sync .
Talvez você queira sincronizar dados unidirecionalmente em aplicativos IoT, como um sensor meteorológico que envia dados para a nuvem. O arquivo de dados também é útil para gravar outros tipos de dados imutáveis em que você não exige a resolução de conflitos, como criar faturas a partir de uma aplicação de varejo ou registrar evento de aplicação.
A ingestão de dados é otimizada para fornecer melhorias de desempenho para volumes de trabalho pesados somente de inserção no lado do cliente.
Sincronizar dados unidirecionalmente a partir de um aplicativo do cliente
Definir um objeto assimétrico
Objetos assimétricos sincronizam dados unidirecionalmente. Defina um objeto assimétrico configurando asymmetric
para true
em seu modelo de objeto:
class WeatherSensor extends Realm.Object { static schema = { name: "WeatherSensor", // Sync WeatherSensor objects one way from your device // to your Atlas database. asymmetric: true, primaryKey: "_id", properties: { _id: "objectId", deviceId: "string", temperatureInFahrenheit: "int", barometricPressureInHg: "float", windSpeedInMph: "float", }, }; }
class WeatherSensor extends Realm.Object<WeatherSensor> { _id!: Realm.BSON.ObjectId; deviceId!: string; temperatureInFahrenheit!: number; barometricPressureInHg!: number; windSpeedInMph!: number; static schema: ObjectSchema = { name: "WeatherSensor", // sync WeatherSensor objects one way from your device // to your Atlas database. asymmetric: true, primaryKey: "_id", properties: { _id: "objectId", deviceId: "string", temperatureInFahrenheit: "int", barometricPressureInHg: "float", windSpeedInMph: "float", }, }; }
Para obter mais informações sobre como definir um objeto assimétrico, consulte Definir um objeto assimétrico.
Conecte-se e autentique-se com um App Services App
Para transmitir dados do cliente para seu aplicativo de backend, você deve conectar-se a um backend do App Services e autenticar um usuário.
// Create an anonymous credential const credentials = Realm.Credentials.anonymous(); const user = await app.logIn(credentials);
// Create an anonymous credential const credentials = Realm.Credentials.anonymous(); const user = await app.logIn(credentials);
A ingestão de dados é uma funcionalidade do Flexible Sync, portanto, o aplicativo ao qual você se conecta deve usar o Flexible Sync.
Abrir um Realm
Depois de ter um usuário autenticado, você pode abrir um domínio sincronizado usando um objeto de configuração Flexible Sync.
const realm = await Realm.open({ schema: [WeatherSensor], sync: { user: app.currentUser, flexible: true, }, });
Ao contrário da sincronização bidirecional, o arquivo de dados não usa uma assinatura Flexible Sync.
Não é possível executar uma query em um objeto assimétrico ou escrevê-lo em um Realm local, portanto, objetos assimétricos são incompatíveis com o Flexible Sync bidirecional, a sincronização baseada em partição ou o uso de Realm local.
Criar objetos assimétricos
Depois de abrir um Realm, você pode criar um objeto assimétrico dentro de uma transação de escrita usando Realm.create(). Ao criar um objeto assimétrico, o Realm.create()
retorna undefined
em vez do próprio objeto.
realm.write(() => { realm.create(WeatherSensor, { _id: new BSON.objectId(), deviceId: "WX1278UIT", temperatureInFahrenheit: 66.7, barometricPressureInHg: 29.65, windSpeedInMph: 2, }); });
Você não pode ler esses objetos. Depois de criados, eles são sincronizados com o backend do App Services e o reconhecimento de data center vinculado do Atlas.
O Atlas Device Sync gerencia o ciclo de vida desses dados por completo. Ele é mantido no dispositivo até que a sincronização da ingestão de dados seja concluída e, em seguida, é removido do dispositivo.