

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración desde Couchbase Server
<a name="migration-from-couchbase"></a>

**Topics**
+ [Introducción](#introduction)
+ [Comparación con Amazon DocumentDB](#comparison-to-amazon-documentdb)
+ [Discovery](#discovery)
+ [Planificación](#planning)
+ [Migración](#migration)
+ [Validación](#validation)

## Introducción
<a name="introduction"></a>

Esta guía presenta los puntos clave que hay que tener en cuenta al migrar de Couchbase Server a Amazon DocumentDB. En ella se explican las consideraciones que deben tenerse en cuenta para las fases de descubrimiento, planificación, ejecución y validación de la migración. También explica cómo realizar migraciones en línea y sin conexión.

## Comparación con Amazon DocumentDB
<a name="comparison-to-amazon-documentdb"></a>


|  | **Servidor Couchbase ** | **Amazon DocumentDB** | 
| --- | --- | --- | 
| Organización de datos  | En las versiones 7.0 y posteriores, los datos se organizan en grupos, ámbitos y colecciones. En versiones anteriores, los datos se organizaban en grupos. | Los datos se organizan en bases de datos y colecciones. | 
| Compatibilidad  | Hay API independientes para cada servicio (por ejemplo, datos, índices, búsquedas, etc.). Las búsquedas secundarias utilizan SQL\+\+ (antes conocido como N1QL), un lenguaje de consulta basado en ANSI-standard SQL, por lo que muchos desarrolladores lo conocen. | Amazon DocumentDB es compatible con la API de MongoDB. [compatibility.html](compatibility.html) | 
| Arquitectura | El almacenamiento se adjunta a cada instancia del clúster. No puede escalar el procesamiento de forma independiente del almacenamiento. | Amazon DocumentDB está diseñado para la nube y para evitar las limitaciones de las arquitecturas de bases de datos tradicionales. Las capas de [ procesamiento y almacenamiento están separadas ](db-clusters-understanding.html) en Amazon DocumentDB y la capa de procesamiento se puede [ escalar independientemente del almacenamiento. ](how-it-works.html) | 
| Añada capacidad de lectura a petición  | Los clústeres se pueden escalar añadiendo instancias. Como el almacenamiento se adjunta a la instancia en la que se ejecuta el servicio, el tiempo que se tarda en escalar depende de la cantidad de datos que sea necesario mover a la nueva instancia o reequilibrar. | Puede escalar la lectura de su clúster de Amazon DocumentDB [ creando hasta 15 réplicas ](db-cluster-manage-performance.html#db-cluster-manage-scaling-reads) de Amazon DocumentDB en el clúster. No hay ningún impacto en la capa de almacenamiento. | 
| Recupérese rápidamente de una falla en un nodo  | Los clústeres tienen funciones de conmutación por error automática, pero el tiempo necesario para que el clúster recupere su capacidad máxima depende de la cantidad de datos que se deban mover a la nueva instancia. | Amazon DocumentDB puede realizar la [ conmutación por error de la instancia principal, ](failover.html) normalmente en un plazo de 30 segundos, y restaurar el clúster a su máxima potencia en un plazo de 8 a 10 minutos, independientemente de la cantidad de datos del clúster. | 
| Amplíe el almacenamiento a medida que aumenten los datos  | En el caso de los clústeres autogestionados, el almacenamiento y el iOS no se escalan automáticamente. | El [ almacenamiento de Amazon DocumentDB y iOS se escalan automáticamente. ](db-cluster-manage-performance.html#db-cluster-manage-scaling-storage) | 
| Realice copias de seguridad de los datos sin afectar al rendimiento  | Las copias de seguridad las realiza el servicio de copias de seguridad y no están habilitadas de forma predeterminada. Dado que el almacenamiento y el procesamiento no están separados, el rendimiento puede verse afectado. | Las copias de seguridad de Amazon DocumentDB están habilitadas de forma predeterminada y no se pueden desactivar. Las copias de seguridad las gestiona la capa de almacenamiento, por lo que no tienen ningún impacto en la capa de procesamiento. Amazon DocumentDB admite [ la restauración a partir de una instantánea de clúster ](backup_restore-restore_from_snapshot.html) y [ la restauración a un punto determinado. ](backup_restore-point_in_time_recovery.html) | 
| Durabilidad de los datos  | Puede haber un máximo de 3 réplicas de datos en un clúster para un total de 4 copias. Cada instancia en la que se ejecute el servicio de datos tendrá 1, 2 o 3 copias de réplica de los datos activas. | Amazon DocumentDB conserva 6 copias de los datos con independencia del número de instancias informáticas que haya, con un quórum de escritura de 4 y se mantiene fiel. Los clientes reciben un acuse de recibo después de que la capa de almacenamiento haya conservado 4 copias de los datos. | 
| Coherencia | Se admite la coherencia inmediata de K/V las operaciones. El SDK de Couchbase dirige las K/V solicitudes a la instancia específica que contiene la copia activa de los datos, de modo que, una vez que se confirma una actualización, el cliente tiene la garantía de leerla. La replicación de las actualizaciones en otros servicios (índice, búsqueda, análisis, generación de eventos) es, en última instancia, coherente. | En última instancia, las réplicas de Amazon DocumentDB son coherentes. Si se requieren lecturas de coherencia inmediatas, el cliente puede leer desde la instancia principal. | 
| Replicación | Cross-Data La replicación central (XDCR) proporciona una replicación filtrada, activa y passive/active activa de datos en muchas: muchas topologías. | [Los clústeres globales de Amazon DocumentDB ](global-clusters.html) proporcionan una replicación activa-pasiva en topologías 1:muchos (hasta 10). | 

## Discovery
<a name="discovery"></a>

La migración a Amazon DocumentDB requiere un conocimiento profundo de la carga de trabajo de la base de datos existente. El descubrimiento de la carga de trabajo es el proceso de analizar la configuración y las características operativas del clúster de Couchbase (el conjunto de datos, los índices y la carga de trabajo) para garantizar una transición fluida con una interrupción mínima.

### Configuración del clúster
<a name="cluster-configuration"></a>

Couchbase utiliza una arquitectura centrada en los servicios en la que cada capacidad corresponde a un servicio. Ejecute el siguiente comando en su clúster de Couchbase para determinar qué servicios se están utilizando (consulte [ Obtener información sobre los nodos): ](https://docs.couchbase.com/server/current/rest-api/rest-node-get-info.html)

```
curl -v -u <administrator>:<password> \
  http://<ip-address-or-hostname>:<port>/pools/nodes | \
  jq '[.nodes[].services[]] | unique'
```

Código de salida de ejemplo:

```
[
  "backup",
  "cbas",
  "eventing",
  "fts",
  "index",
  "kv",
  "n1ql"
]
```

Los servicios de Couchbase incluyen lo siguiente:

#### Servicio de datos (kv)
<a name="data-service-kv"></a>

El servicio de datos proporciona read/write acceso a los datos de la memoria y del disco.

Amazon DocumentDB admite K/V operaciones con datos JSON a través de la API de [ MongoDB. ](java-crud-operations.html)

#### Servicio de consultas (n1ql)
<a name="query-service-n1ql"></a>

El servicio de consultas admite la consulta de datos de JSON a través de SQL\+\+.

Amazon DocumentDB admite la consulta de datos de JSON mediante la API de MongoDB.

#### Servicio de índices (index)
<a name="index-service-index"></a>

El servicio de índices crea y mantiene índices de datos, lo que permite realizar consultas más rápidas.

Amazon DocumentDB admite un índice principal predeterminado y la creación de índices secundarios a partir de datos JSON mediante la API de MongoDB.

#### Servicio de búsqueda (fts)
<a name="search-service-fts"></a>

El servicio de búsqueda admite la creación de índices para la búsqueda de texto completo.

La función nativa de búsqueda de texto completo de Amazon DocumentDB le permite [ realizar consultas de texto básicas en grandes conjuntos de datos textuales mediante índices ](text-search.html) de texto especiales mediante la API. MongoDB Para obtener funciones avanzadas como la búsqueda difusa, la búsqueda multilingüe y la búsqueda entre colecciones, utilice la integración Zero-ETL de [ Amazon DocumentDB con Amazon Service. OpenSearch ](https://aws.amazon.com/blogs/big-data/amazon-documentdb-zero-etl-integration-with-amazon-opensearch-service-is-now-available/)

#### Servicio de análisis (cbas)
<a name="analytics-service-cbas"></a>

El servicio de análisis permite analizar los datos de JSON prácticamente en tiempo real.

Amazon DocumentDB admite consultas ad hoc sobre datos JSON mediante la API de MongoDB. También puede [ ejecutar consultas complejas en sus datos de JSON en Amazon DocumentDB mediante Apache Spark que se ejecuta en Amazon EMR. ](https://aws.amazon.com/blogs/database/run-complex-queries-on-massive-amounts-of-data-stored-on-your-amazon-documentdb-clusters-using-apache-spark-running-on-amazon-emr/)

#### Servicio de eventos (eventing)
<a name="eventing-service-eventing"></a>

El servicio de eventos ejecuta la lógica empresarial definida por el usuario en respuesta a los cambios en los datos.

Amazon DocumentDB automatiza las cargas de trabajo basadas en eventos al [ invocar AWS Lambda funciones cada vez que cambian los datos en su clúster de Amazon DocumentDB. ](https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb-tutorial.html)

#### Servicio de respaldo (respaldo)
<a name="backup-service-backup"></a>

El servicio de respaldo programa copias de seguridad de datos completas e incrementales y combina las copias de seguridad de datos anteriores.

Amazon DocumentDB realiza copias de seguridad continuas de sus datos en Amazon S3 con un período de retención de 1 a 35 días para que pueda restaurarlos rápidamente en cualquier punto dentro del período de retención de la copia de seguridad. Amazon DocumentDB también toma instantáneas automáticas de los datos como parte de este proceso de copia de seguridad continua. También puede [ gestionar la copia de seguridad y la restauración de Amazon DocumentDB con. AWS Backup](https://aws.amazon.com/blogs/storage/manage-backup-and-restore-of-amazon-documentdb-with-aws-backup/).

### Características operativas
<a name="operational-characteristics"></a>

Utilice la herramienta de [ detección de Couchbase ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/discovery-tool-for-couchbase) para obtener la siguiente información sobre su conjunto de datos, índices y carga de trabajo. Esta información le ayudará a dimensionar su clúster de Amazon DocumentDB.

#### Conjunto de datos
<a name="data-set"></a>

La herramienta recupera la siguiente información sobre el depósito, el alcance y la recopilación:

1. nombre del bucket

1. tipo de bucket

1. nombre del ámbito

1. nombre de la colección

1. tamaño total (bytes)

1. total de artículos

1. tamaño del artículo (bytes)

#### Índices
<a name="couchbase-indexes"></a>

La herramienta recupera las siguientes estadísticas de índice y todas las definiciones de índice para todos los grupos. Tenga en cuenta que los índices principales están excluidos, ya que Amazon DocumentDB crea automáticamente un índice principal para cada colección.

1. nombre del bucket

1. nombre del ámbito

1. nombre de la colección

1. nombre del índice

1. tamaño del índice (bytes)

#### Carga de trabajo
<a name="workload"></a>

La herramienta recupera las métricas de consulta K/V de N1QL. K/V Los valores de las métricas se recopilan a nivel de bucket y las métricas de SQL\+\+ se recopilan a nivel de clúster.

Las opciones de línea de comandos de la herramienta son las siguientes:

```
python3 discovery.py \
  --username <source cluster username> \
  --password <source cluster password> \
  --data_node <data node IP address or DNS name> \
  --admin_port <administration http REST port> \
  --kv_zoom <get bucket statistics for specified interval> \
  --tools_path <full path to Couchbase tools> \
  --index_metrics <gather index definitions and SQL++ metrics> \
  --indexer_port <indexer service http REST port> \
  --n1ql_start <start time for sampling> \
  --n1ql_step <sample interval over the sample period>
```

A continuación se muestra un comando de ejemplo:

```
python3 discovery.py \
  --username username \
  --password ******** \
  --data_node "http://10.0.0.1" \
  --admin_port 8091 \
  --kv_zoom week \
  --tools_path "/opt/couchbase/bin" \
  --index_metrics true \
  --indexer_port 9102 \
  --n1ql_start -60000 \
  --n1ql_step 1000
```

K/V Los valores métricos se basarán en muestras cada 10 minutos durante la semana anterior (consulte el método [ HTTP y el URI](https://docs.couchbase.com/server/current/rest-api/rest-bucket-stats.html#http-method-and-uri)). Los valores métricos de SQL\+\+ se basarán en muestras cada 1 segundo durante los últimos 60 segundos (consulte Etiquetas [https://docs.couchbase.com/server/current/rest-api/rest-statistics-single.html#general-labels](https://docs.couchbase.com/server/current/rest-api/rest-statistics-single.html#general-labels) generales). El resultado del comando estará en los siguientes archivos:

**collection-stats.csv**: información sobre el bucket, el alcance y la colección

```
bucket,bucket_type,scope_name,collection_name,total_size,total_items,document_size
beer-sample,membase,_default,_default,2796956,7303,383
gamesim-sample,membase,_default,_default,114275,586,196
pillowfight,membase,_default,_default,1901907769,1000006,1902
travel-sample,membase,inventory,airport,547914,1968,279
travel-sample,membase,inventory,airline,117261,187,628
travel-sample,membase,inventory,route,13402503,24024,558
travel-sample,membase,inventory,landmark,3072746,4495,684
travel-sample,membase,inventory,hotel,4086989,917,4457
...
```

**index-stats.csv ** — nombres y tamaños de índices

```
bucket,scope,collection,index-name,index-size
beer-sample,_default,_default,beer_primary,468144
gamesim-sample,_default,_default,gamesim_primary,87081
travel-sample,inventory,airline,def_inventory_airline_primary,198290
travel-sample,inventory,airport,def_inventory_airport_airportname,513805
travel-sample,inventory,airport,def_inventory_airport_city,487289
travel-sample,inventory,airport,def_inventory_airport_faa,526343
travel-sample,inventory,airport,def_inventory_airport_primary,287475
travel-sample,inventory,hotel,def_inventory_hotel_city,497125
...
```

**kv-stats.csv**: obtiene, establece y elimina las métricas de todos los buckets

```
bucket,gets,sets,deletes
beer-sample,0,0,0
gamesim-sample,0,0,0
pillowfight,369,521,194
travel-sample,0,0,0
```

**n1ql-stats.csv**: SQL\+\+ selecciona, elimina e inserta métricas para el clúster

```
selects,deletes,inserts
0,132,87
```

**indexes- <bucket-name>.txt**: definiciones de índice de todos los índices del bucket. Tenga en cuenta que los índices principales están excluidos, ya que Amazon DocumentDB crea automáticamente un índice principal para cada colección.

```
CREATE INDEX `def_airportname` ON `travel-sample`(`airportname`)
CREATE INDEX `def_city` ON `travel-sample`(`city`)
CREATE INDEX `def_faa` ON `travel-sample`(`faa`)
CREATE INDEX `def_icao` ON `travel-sample`(`icao`)
CREATE INDEX `def_inventory_airport_city` ON `travel-sample`.`inventory`.`airport`(`city`)
CREATE INDEX `def_inventory_airport_faa` ON `travel-sample`.`inventory`.`airport`(`faa`)
CREATE INDEX `def_inventory_hotel_city` ON `travel-sample`.`inventory`.`hotel`(`city`)
CREATE INDEX `def_inventory_landmark_city` ON `travel-sample`.`inventory`.`landmark`(`city`)
CREATE INDEX `def_sourceairport` ON `travel-sample`(`sourceairport`)
...
```

## Planificación
<a name="planning"></a>

En la fase de planificación, determinará los requisitos del clúster de Amazon DocumentDB y asignará los depósitos, ámbitos y colecciones de Couchbase a las bases de datos y colecciones de Amazon DocumentDB.

### Requisitos de clúster de Amazon DocumentDB
<a name="amazon-documentdb-cluster-requirements"></a>

Utilice los datos recopilados en la fase de descubrimiento para dimensionar su clúster de Amazon DocumentDB. Consulte Dimensionamiento de [ instancias ](best_practices.html#best_practices-instance_sizing) para obtener más información sobre el tamaño de su clúster de Amazon DocumentDB.

### Asignación de cubos, ámbitos y colecciones a bases de datos y colecciones
<a name="mapping-buckets-scopes-and-collections-to-databases-and-collections"></a>

Determine las bases de datos y colecciones que existirán en sus clústeres de Amazon DocumentDB. Tenga en cuenta las siguientes opciones en función de cómo estén organizados los datos en su clúster de Couchbase. Estas no son las únicas opciones, pero proporcionan puntos de partida que puede considerar.

#### Couchbase Server 6.x o anterior
<a name="couchbase-6x-or-earlier"></a>

##### Couchbase se dirige a las colecciones de Amazon DocumentDB
<a name="couchbase-buckets-to-amazon-documentdb-collections"></a>

Migre cada bucket a una colección diferente de Amazon DocumentDB. En este escenario, el valor del documento de Couchbase se utilizará como el `id` valor de Amazon DocumentDB. `_id`

![Couchbase Server 6.x o versiones anteriores se transfieren a las colecciones de Amazon DocumentDB](https://docs.aws.amazon.com/es_es/documentdb/latest/devguide/images/buckets-to-collections.png)


#### Couchbase Server 7.0 o posterior
<a name="couchbase-70-or-later"></a>

##### De las colecciones de Couchbase a las colecciones de Amazon DocumentDB
<a name="couchbase-collections-to-amazon-documentdb-collections"></a>

Migre cada colección a una colección diferente de Amazon DocumentDB. En este escenario, el valor del documento de Couchbase se utilizará como el `id` valor de Amazon DocumentDB. `_id`

![De las colecciones de Couchbase Server 7.0 o posterior a las colecciones de Amazon DocumentDB](https://docs.aws.amazon.com/es_es/documentdb/latest/devguide/images/collections-to-collections.png)


## Migración
<a name="migration"></a>

### Migración de índices
<a name="index-migration"></a>

La migración a Amazon DocumentDB implica transferir no solo datos, sino también índices para mantener el rendimiento de las consultas y optimizar las operaciones de la base de datos. En esta sección se describe el proceso detallado paso a paso para migrar los índices a Amazon DocumentDB y, al mismo tiempo, garantizar la compatibilidad y la eficiencia.

Utilice [ Amazon Q ](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html) (disponible en la consola de administración de AWS o en su IDE) para convertir las `CREATE INDEX` instrucciones de SQL\+\+ en comandos de Amazon DocumentDB. `createIndex()`

1. Cargue los archivos ** <bucket name>**indexes-.txt creados por la herramienta Discovery Tool para Couchbase.

1. Introduzca el siguiente mensaje:

   `Convert the Couchbase CREATE INDEX statements to Amazon DocumentDB createIndex commands`

Amazon Q generará `createIndex()` comandos de Amazon DocumentDB equivalentes. Tenga en cuenta que es posible que necesite actualizar los nombres de las colecciones en función de cómo [ asignó los depósitos, ámbitos y colecciones de Couchbase a las colecciones de Amazon DocumentDB. ](#mapping-buckets-scopes-and-collections-to-databases-and-collections)

Por ejemplo:

**indexes-beer-sample.txt **

```
CREATE INDEX `beerType` ON `beer-sample`(`type`)
CREATE INDEX `code` ON `beer-sample`(`code`) WHERE (`type` = "brewery")
```

Ejemplo de salida de Amazon Q (extracto):

```
db.beerSample.createIndex(
  { "type": 1 },
  {
    "name": "beerType",
    "background": true
  }
)

db.beerSample.createIndex(
  { "code": 1 },
  {
    "name": "code",
    "background": true,
    "partialFilterExpression": { "type": "brewery" }
  }
)
```

Para ver los índices que Amazon Q no pueda convertir, consulte [ Administración de índices e índices de Amazon DocumentDB ](managing-indexes.html) y de las propiedades de los [ índices para obtener más información. ](mongo-apis.html#mongo-apis-index)

### Refactorice el código para usar las API de MongoDB
<a name="refactor-code-to-use-the-mongodb-apis"></a>

Los clientes usan los SDK de Couchbase para conectarse al servidor de Couchbase. Los clientes de Amazon DocumentDB utilizan los controladores MongoDB para conectarse a Amazon DocumentDB. Todos los idiomas compatibles con los SDK de Couchbase también son compatibles con los controladores de MongoDB. Consulte [ MongoDB Drivers ](https://www.mongodb.com/docs/drivers/) para obtener más información sobre el controlador para su idioma.

Como las API de Couchbase Server y Amazon DocumentDB son diferentes, tendrá que refactorizar el código para usar las API de MongoDB adecuadas. Puede usar [ Amazon Q ](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html) para convertir las llamadas a la API y las consultas de SQL\+\+ en las K/V API de MongoDB equivalentes:

1. Cargue los archivos de código fuente.

1. Introduzca el siguiente mensaje:

   `Convert the Couchbase API code to Amazon DocumentDB API code`

Con el ejemplo de código de [ Python de ](https://docs.couchbase.com/python-sdk/current/hello-world/start-using-sdk.html#hello-couchbase) Hello Couchbase, Amazon Q genera lo siguiente (extracto):

```
from pymongo import MongoClient

# Connection parameters
database_name = "travel-sample"

# Connect to Amazon DocumentDB cluster
client = MongoClient('<Amazon DocumentDB connection string>',
                     tls=True,
                     tlsCAFile='global-bundle.pem')

# Get reference to database and collection
db = client['travel-sample']
airline_collection = db['airline']

# upsert document function
def upsert_document(doc):
    print("\nUpsert Result: ")
    try:
        # key will equal: "airline_8091"
        key = doc["type"] + "_" + str(doc["id"])
        doc['_id'] = key # Amazon DocumentDB uses _id as primary key
        result = airline_collection.update_one(
            {'_id': key},
            {'$set': doc},
            upsert=True
        )
        print(f"Modified count: {result.modified_count}")
    except Exception as e:
        print(e)

# get document function
def get_airline_by_key(key):
    print("\nGet Result: ")
    try:
        result = airline_collection.find_one({'_id': key})
        print(result)
    except Exception as e:
        print(e)

# query for document by callsign
def lookup_by_callsign(cs):
    print("\nLookup Result: ")
    try:
        result = airline_collection.find(
            {'callsign': cs},
            {'name': 1, '_id': 0}
        )
        for doc in result:
            print(doc['name'])
    except Exception as e:
        print(e)

# Test document
airline = {
    "type": "airline",
    "id": 8091,
    "callsign": "CBS",
    "iata": None,
    "icao": None,
    "name": "Couchbase Airways",
}

upsert_document(airline)
get_airline_by_key("airline_8091")
lookup_by_callsign("CBS")
```

Consulte la sección [ Conexión mediante programación a Amazon DocumentDB ](connect_programmatically.html) para ver ejemplos de cómo conectarse a Amazon DocumentDB en Python, PHP, Go, Java Node.js, C\#/.NET, R y Ruby.

### Seleccione el enfoque de migración
<a name="select-the-migration-approach"></a>

Al migrar datos a Amazon DocumentDB, hay dos opciones:

1. [migración fuera de línea ](#offline-migration)

1. [migración en línea ](#online-migration)

**nota**  
Amazon DocumentDB usa el `_id` campo como clave principal para cada documento. Los enfoques de migración de esta guía almacenan la clave del documento de Couchbase en el campo. `_id` Para la migración sin conexión, esto se realiza mediante la `--include-key _id` opción que aparece en. `cbexport` Para la migración en línea, esto se hace a través del conector Kafka. `ProvidedInKeyStrategy`

#### Migración sin conexión
<a name="offline-migration"></a>

Considere la posibilidad de realizar una migración offline cuando:
+ **El tiempo de inactividad es aceptable: la migración ** sin conexión implica detener las operaciones de escritura en la base de datos de origen, exportar los datos y, a continuación, importarlos a Amazon DocumentDB. Este proceso implica un tiempo de inactividad para su aplicación. Si su aplicación o carga de trabajo pueden tolerar este período de falta de disponibilidad, la migración sin conexión es una opción viable.
+ **Migrar conjuntos de datos más pequeños o realizar pruebas de concepto: ** en el caso de los conjuntos de datos más pequeños, el tiempo necesario para el proceso de exportación e importación es relativamente corto, por lo que la migración sin conexión es un método rápido y sencillo. También es ideal para entornos de desarrollo, pruebas y pruebas de concepto en los que el tiempo de inactividad es menos crítico.
+ **La simplicidad es una prioridad: ** el método offline, que utiliza cbexport y mongoimport, suele ser el método más sencillo para migrar datos. Evita las complejidades de la captura de datos cambiados (CDC) que implican los métodos de migración en línea.
+ **No es necesario replicar los cambios en curso: ** si la base de datos de origen no recibe cambios de forma activa durante la migración, o si esos cambios no son fundamentales para capturarlos y aplicarlos al destino durante el proceso de migración, es apropiado adoptar un enfoque fuera de línea.

**Topics**
+ [Couchbase Server 6.x o anterior](#couchbase-6x-or-earlier-offline)
+ [Couchbase Server 7.0 o posterior](#couchbase-70-or-later-offline)

##### Couchbase Server 6.x o anterior
<a name="couchbase-6x-or-earlier-offline"></a>

##### Del paquete de Couchbase a la colección Amazon DocumentDB
<a name="couchbase-bucket-to-amazon-documentdb-collection-offline"></a>

Exporte los datos con [ cbexport json ](https://docs-archive.couchbase.com/server/6.6/tools/cbexport-json.html) para crear un volcado en JSON de todos los datos del bucket. Para la `--format` opción puedes usar `lines` o. `list`

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id
```

Importe los datos a una colección de Amazon DocumentDB mediante [ mongoimport ](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) con la opción adecuada para importar las líneas o la lista:

líneas:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --ssl \
  --sslCAFile global-bundle.pem \
  --file export.json
```

lista:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --ssl \
  --sslCAFile global-bundle.pem \
  --jsonArray \
  --file export.json
```

##### Couchbase Server 7.0 o posterior
<a name="couchbase-70-or-later-offline"></a>

Para realizar una migración sin conexión, utilice las herramientas cbexport y mongoimport:

##### Cubo de Couchbase con alcance y colección predeterminados
<a name="couchbase-bucket-with-default-scope-and-default-collection-offline"></a>

Exporte los datos con [ cbexport json ](https://docs.couchbase.com/server/current/tools/cbexport-json.html) para crear un volcado en JSON de todas las colecciones del bucket. Para la `--format` opción puedes usar `lines` o. `list`

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id
```

Importe los datos a una colección de Amazon DocumentDB mediante [ mongoimport ](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) con la opción adecuada para importar las líneas o la lista:

líneas:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --ssl \
  --sslCAFile global-bundle.pem \
  --file export.json
```

lista:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --ssl \
  --sslCAFile global-bundle.pem \
  --jsonArray \
  --file export.json
```

##### De las colecciones de Couchbase a las colecciones de Amazon DocumentDB
<a name="couchbase-collections-to-amazon-documentdb-collections-offline"></a>

Exporte los datos con [ cbexport json ](https://docs.couchbase.com/server/current/tools/cbexport-json.html) para crear un volcado en JSON de cada colección. Usa la `--include-data` opción para exportar cada colección. Para la `--format` opción, puede usar `lines` o`list`. Usa las `--collection-field` opciones `--scope-field` y para almacenar el nombre del ámbito y la colección en los campos especificados de cada documento JSON.

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --include-data <scope name>.<collection name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id \
  --scope-field "_scope" \
  --collection-field "_collection"
```

Como cbexport agregó los `_collection` campos `_scope` y a todos los documentos exportados, puedes eliminarlos de todos los documentos del archivo de exportación mediante la búsqueda y el reemplazo`sed`, o mediante el método que prefieras.

Importe los datos de cada colección a una colección de Amazon DocumentDB mediante [ mongoimport ](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) con la opción adecuada para importar las líneas o la lista:

líneas:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --ssl \
  --sslCAFile global-bundle.pem \
  --file export.json
```

lista:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --ssl \
  --sslCAFile global-bundle.pem \
  --jsonArray \
  --file export.json
```

#### Migración en línea
<a name="online-migration"></a>

Considere la posibilidad de realizar una migración en línea cuando necesite minimizar el tiempo de inactividad y los cambios en curso deban replicarse en Amazon DocumentDB prácticamente en tiempo real.

Consulte [ Cómo realizar una migración en vivo de Couchbase a Amazon DocumentDB ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) para obtener información sobre cómo realizar una migración en vivo a Amazon DocumentDB. La documentación explica cómo implementar la solución y realizar una migración en vivo de un bucket a un clúster de Amazon DocumentDB.

**Topics**
+ [Couchbase Server 6.x o anterior](#couchbase-6x-or-earlier-online)
+ [Couchbase Server 7.0 o posterior](#couchbase-70-or-later-online)

##### Couchbase Server 6.x o anterior
<a name="couchbase-6x-or-earlier-online"></a>

##### Del paquete de Couchbase a la colección Amazon DocumentDB
<a name="couchbase-bucket-to-amazon-documentdb-collection-online"></a>

La utilidad de [ migración de Couchbase ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) está preconfigurada para realizar una migración en línea de un bucket de Couchbase a una colección de Amazon DocumentDB. Si analizamos la [ configuración del conector de ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml) sumidero, el `document.id.strategy` parámetro está configurado para usar el valor de la clave del mensaje como valor del `_id` campo (consulte Propiedades de la estrategia del identificador del conector de [ sumidero): ](https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/id-strategy/#std-label-sink-configuration-id-strategy)

```
ConnectorConfiguration:
  document.id.strategy: 'com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy'
```

##### Couchbase Server 7.0 o posterior
<a name="couchbase-70-or-later-online"></a>

##### Cubeta de Couchbase con alcance y recopilación predeterminados
<a name="couchbase-bucket-with-default-scope-and-default-collection-online"></a>

La utilidad de [ migración de Couchbase ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) está preconfigurada para realizar una migración en línea de un bucket de Couchbase a una colección de Amazon DocumentDB. Si analizamos la [ configuración del conector de ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml) sumidero, el `document.id.strategy` parámetro está configurado para usar el valor de la clave del mensaje como valor del `_id` campo (consulte Propiedades de la estrategia del identificador del conector de [ sumidero): ](https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/id-strategy/#std-label-sink-configuration-id-strategy)

```
ConnectorConfiguration:
  document.id.strategy: 'com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy'
```

##### De las colecciones de Couchbase a las colecciones de Amazon DocumentDB
<a name="couchbase-collections-to-amazon-documentdb-collections-online"></a>

Configure el conector [ de código fuente ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml) para transmitir cada colección de Couchbase de cada ámbito a un tema diferente (consulte [ las opciones de configuración del código fuente). ](https://docs.couchbase.com/kafka-connector/current/source-configuration-options.html#couchbase.collections) Por ejemplo:

```
ConnectorConfiguration:
  # add couchbase.collections configuration
  couchbase.collections: '<scope 1>.<collection 1>, <scope 1>.<collection 2>, ...'
```

Configure el conector de [ sumidero ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml) para transmitir desde cada tema a una colección independiente de Amazon DocumentDB (consulte Propiedades de configuración del conector de [ sumidero). ](https://github.com/mongodb-labs/mongo-kafka/blob/master/docs/sink.md#sink-connector-configuration-properties) Por ejemplo:

```
ConnectorConfiguration:
  # remove collection configuration  
  #collection: 'test'
  
  # modify topics configuration
  topics: '<bucket>.<scope 1>.<collection 1>, <bucket>.<scope 1>.<collection 2>, ...'

  # add topic.override.%s.%s configurations for each topic 
  topic.override.<bucket>.<scope 1>.<collection 1>.collection: '<collection>'
  topic.override.<bucket>.<scope 1>.<collection 2>.collection: '<collection>'
```

## Validación
<a name="validation"></a>

Esta sección proporciona un proceso de validación detallado para verificar la coherencia e integridad de los datos después de la migración a Amazon DocumentDB. Los pasos de validación se aplican independientemente del método de migración.

**Topics**
+ [Verifique que todas las colecciones existan en el destino](#validation-checklist-step-1)
+ [Verifique el recuento de documentos entre los clústeres de origen y destino](#validation-checklist-step-2)
+ [Compare los documentos entre los clústeres de origen y de destino](#validation-checklist-step-3)

### Verifique que todas las colecciones existan en el destino
<a name="validation-checklist-step-1"></a>

#### Fuente de Couchbase
<a name="source-verify-collections"></a>

opción 1: banco de trabajo de consultas

```
SELECT RAW `path`
  FROM system:keyspaces
  WHERE `bucket` = '<bucket>'
```

opción 2: herramienta [ cbq ](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT RAW `path`
       FROM system:keyspaces
       WHERE `bucket` = '<bucket>'"
```

#### Amazon DocumentDB como destino
<a name="target-verify-collections"></a>

mongosh (consulte [ Conectarse a su clúster de Amazon DocumentDB): ](connect-ec2-manual.html#manual-connect-ec2.connect-use)

```
db.getSiblingDB('<database>')
db.getCollectionNames()
```

### Verifique el recuento de documentos entre los clústeres de origen y destino
<a name="validation-checklist-step-2"></a>

#### Fuente de Couchbase
<a name="source-verify-document-count"></a>

##### Couchbase Server 6.x o anterior
<a name="source-verify-document-count-couchbase-6x-or-earlier"></a>

opción 1: banco de trabajo de consultas

```
SELECT COUNT(*)
FROM `<bucket>`
```

opción 2: cbq [https://docs.couchbase.com/server/current/cli/cbq-tool.html](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket>`"
```

##### Couchbase Server 7.0 o posterior
<a name="source-verify-document-count-couchbase-70-or-later"></a>

opción 1: banco de trabajo de consultas

```
SELECT COUNT(*)
FROM `<bucket>`.`<scope>`.`<collection>`
```

opción 2: cbq [https://docs.couchbase.com/server/current/cli/cbq-tool.html](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket>`.`<scope>`.`<collection>`"
```

#### Amazon DocumentDB como destino
<a name="target-verify-document-count"></a>

mongosh (consulte [ Conectarse a su clúster de Amazon DocumentDB): ](connect-ec2-manual.html#manual-connect-ec2.connect-use)

```
db = db.getSiblingDB('<database>')
db.getCollection('<collection>').countDocuments()
```

### Compare los documentos entre los clústeres de origen y de destino
<a name="validation-checklist-step-3"></a>

#### Fuente de Couchbase
<a name="source-compare-documents"></a>

##### Couchbase Server 6.x o anterior
<a name="source-compare-documents-couchbase-6x-or-earlier"></a>

opción 1: banco de trabajo de consultas

```
SELECT META().id as _id, *
FROM `<bucket>`
LIMIT 5
```

opción 2: cbq [https://docs.couchbase.com/server/current/cli/cbq-tool.html](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT META().id as _id, *
       FROM `<bucket>`
       LIMIT 5"
```

##### Couchbase Server 7.0 o posterior
<a name="source-compare-documents-couchbase-70-or-later"></a>

opción 1: banco de trabajo de consultas

```
SELECT META().id as _id, *
FROM `<bucket>`.`<scope>`.`<collection>`
LIMIT 5
```

opción 2: cbq [https://docs.couchbase.com/server/current/cli/cbq-tool.html](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT META().id as _id, *
       FROM `<bucket>`.`<scope>`.`<collection>`
       LIMIT 5"
```

#### Amazon DocumentDB como destino
<a name="target-compare-documents"></a>

mongosh (consulte [ Conectarse a su clúster de Amazon DocumentDB): ](connect-ec2-manual.html#manual-connect-ec2.connect-use)

```
db = db.getSiblingDB('<database>')
db.getCollection('<collection>').find({
  _id: {
    $in: [
      <_id 1>, <_id 2>, <_id 3>, <_id 4>, <_id 5>
    ]
  }
})
```