MongoDB — & gt; DynamoDB Migration

Все,

Я пытаюсь перенести в DynamoDB примерно 6 ГБ данных Mongo, состоящих из сотен коллекций. Я написал несколько сценариев с использованием AWS PHP SDK и могу портировать их на очень маленькие коллекции, но когда я пробую те, которые имеют более 20 тыс. Документов (все же очень небольшая коллекция, учитывая все обстоятельства), это либо требует огромного количества времени, либо тихо выходит из строя.

Есть ли у кого-нибудь советы или рекомендации по извлечению данных из Mongo (или любой другой базы данных NoSQL) и переносу их в Dynamo или любую другую базу данных NoSQL. Я чувствую, что это должно быть относительно легко, потому что документы очень плоские / простые.

Любые мысли / предложения будут высоко ценится!

Спасибо!

header.php

<?

require './aws-autoloader.php';
require './MongoGet.php';

set_time_limit(0);

use \Aws\DynamoDb\DynamoDbClient;

$client = \Aws\DynamoDb\DynamoDbClient::factory(array(
'key' => 'MY_KEY',
'secret' => 'MY_SECRET',
'region' => 'MY_REGION',
'base_url' => 'http://localhost:8000'
));

$collection = "AccumulatorGasPressure4093_raw";

function nEcho($str) {
echo "{$str}<br>\n";
}

echo "<pre>";

Тест-store.php

<?

include('test-header.php');

nEcho("Creating table(s)...");

// create test table

$client->createTable(array(
'TableName' => $collection,
'AttributeDefinitions' => array(
array(
'AttributeName' => 'id',
'AttributeType' => 'N'
),
array(
'AttributeName' => 'count',
'AttributeType' => 'N'
)
),
'KeySchema' => array(
array(
'AttributeName' => 'id',
'KeyType'       => 'HASH'
),
array(
'AttributeName' => 'count',
'KeyType'       => 'RANGED'
)
),
'ProvisionedThroughput' => array(
'ReadCapacityUnits'  => 10,
'WriteCapacityUnits' => 20
)
));

$result = $client->describeTable(array(
'TableName' => $collection
));

nEcho("Done creating table...");

nEcho("Getting data from Mongo...");

// instantiate class and get data
$mGet = new MongoGet();
$results = $mGet->getData($collection);

nEcho ("Done retrieving Mongo data...");

nEcho ("Inserting data...");

$i = 0;
foreach($results as $result) {
$insertResult = $client->putItem(array(
'TableName' => $collection,
'Item' => $client->formatAttributes(array(
'id'    => $i,
'date'  => $result['date'],
'value' => $result['value'],
'count' => $i
)),
'ReturnConsumedCapacity' => 'TOTAL'
));

$i++;
}

nEcho("Done Inserting, script ending...");

0

Решение

Я подозреваю, что DynamoDB подавляет вас, особенно если пропускная способность ваших таблиц низкая. SDK повторяет запросы, до 11 раз на запрос, но в конечном итоге запросы не выполняются, что должно вызвать исключение.

Вы должны взглянуть на WriteRequestBatch объект. Этот объект в основном представляет собой очередь элементов, которые отправляются партиями, но любые элементы, которые не могут быть переданы, автоматически помещаются в очередь. Должны предоставить более надежное решение для того, что вы делаете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]