Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Transmitir dados para o Atlas - Kotlin SDK

Nesta página

  • Objetos assimétricos
  • Sincronizar dados unidirecionalmente a partir de um aplicativo do cliente
  • Definir um objeto assimétrico
  • Conecte-se e autentique-se com um App Services App
  • Abrir um Realm
  • Criar objetos assimétricos

Novidade na versão 1.10.0.

Se você tiver uma aplicação móvel ou de cliente que produz um grande volume de dados que deseja transmitir para o MongoDB Atlas, poderá sincronizar os dados unidirecionalmente usando o Realm Mobile Sync. Chamamos de Ingestão de dados o recurso que permite essa sincronização unidirecional .

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.

A ingestão de dados requer Flexible Sync.

O Kotlin SDK fornece um tipo especial de Objeto de Realm para usar com o arquivo de dados: um objeto assimétrico.

Objeto assimétricos suportam amplamente os mesmos tipos de propriedade do RealmObject, com algumas exceções:

  • Objetos assimétricos só podem ser usados em domínios sincronizados configurados com o Flexible Sync. No entanto, você não pode criar assinaturas para objetos assimétricos.

  • Um AsymmetricRealmObject pode conter tipos EmbeddedRealmObject , mas não pode conter tipos RealmObject ou outros tipos AsymmetricRealmObject .

  • AsymmetricRealmObject os tipos não podem ser usados como propriedade em outros Objeto de Realm.

Além disso, objetos assimétricos não funcionam da mesma maneira que outros objetos do Realm . Você não pode adicionar, ler, atualizar ou excluir um objeto assimétrico do Realm. Você só pode criar um objeto assimétrico , que é sincronizado unidirecionalmente com o banco de banco de dados do Atlas vinculado ao seu aplicativo com o Device Sync. O Realm exclui esse objeto após a sincronização.

Dica

Objetos assimétricos e não assimétricos no mesmo Realm

O SDK Kotlin permite que você trabalhe com objetos assimétricos e objetos de Realm não assimétricos (tipos RealmObject e EmbeddedRealmObject ) dentro do mesmo domínio. Inclua todos os objetos na configuração de sincronização ao abrir o realm. No entanto, você não pode assinar os objetos assimétricos.

1

Você pode sincronizar dados unidirecionalmente quando esse objeto é um AsymmetricRealmObject. Defina um objeto assimétrico implementando a interface AsymmetricRealmObject :

// Implements the `AsymmetricRealmObject` interface
class WeatherSensor : AsymmetricRealmObject {
@PersistedName("_id")
@PrimaryKey
var id: ObjectId = ObjectId()
var deviceId: String = ""
var temperatureInFarenheit: Float = 0.0F
var barometricPressureInHg: Float = 0.0F
var windSpeedInMph: Int = 0
}
2

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.

val app = App.create(YOUR_APP_ID)
val user = 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.

3

Depois de ter um usuário autenticado, você pode abrir um Realm sincronizado usando um SyncConfiguration. Especifique os tipos AsymmetricRealmObject que você deseja sincronizar.

val config = SyncConfiguration.create(user, setOf(WeatherSensor::class))
val realm = Realm.open(config)
Log.v("Successfully opened realm: ${realm.configuration.name}")

Ao contrário da sincronização bidirecional, a ingestão de dados não usa uma assinatura de Flexible Sync . Se você tiver objetos não assimétricos no mesmo território, poderá adicionar uma query de assinatura do Flexible Sync apenas para esses objetos.

4

Depois de abrir um Realm, você pode criar um AsymmetricRealmObject dentro de uma transação de escrita usando o método de extensão insert() :

// Open a write transaction
realm.write {
// Create a new asymmetric object
val weatherSensor = WeatherSensor().apply {
deviceId = "WX1278UIT"
temperatureInFarenheit = 6.7F
barometricPressureInHg = 29.65F
windSpeedInMph = 2
}
// Insert the object into the realm with the insert() extension method
insert(weatherSensor)
// WeatherSensor object is inserted into the realm, then synced to the
// App Services backend. You CANNOT access the object locally because it's
// deleted from the local realm after sync is complete.
}

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.

Voltar

Definir o nível de log do cliente