2015-10-23 1 views
2

Я строю приложение для измерения баз данных NoSQL, и у меня есть проблема с вставкой большого количества данных в базу данных Cassandra.Cassanda пакетная вставка с использованием DataStax C# драйвера

Когда я пытаюсь вставить более 1000 записей с использованием DataStax C#, я получаю сообщение об ошибке AggregateException.

Это моя модель данных:

public Guid Id { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public int Year { get; set; } 
    public string Genres { get; set; } 
    public int Rating { get; set; } 
    public string OriginalLanguage { get; set; } 
    public string ProductionCountry { get; set; } 
    public int VotingsNumber { get; set; } 

И это мой код:

private string InsertData(ISession session, List<Movie> moviesList) 
{ 
     var table = session.GetTable<Movie>(); 
     table.CreateIfNotExists(); 

     var batch = session.CreateBatch(); 
     foreach (var record in moviesList) 
     { 
      batch.Append(table.Insert(record)); 
     } 

     Stopwatch watch = new Stopwatch(); 

     watch.Start(); 
     batch.Execute(); 
     watch.Stop(); 

     return watch.ElapsedMilliseconds.ToString(); 
} 

Может кто-нибудь объяснить мне, что Я делаю не так? Спасибо, П.

+1

Что находится внутри этого 'AggregateException'? И вы уверены, что хотите объединить> 1000 строк вместе? Это ваш реальный случай использования? Пакеты, как правило, медленные и лучше избегать, если это возможно, но это еще одна проблема. – kha

+0

@kha Да, я уверен. Итак, какой способ вставить большую коллекцию (около 1000000 записей) в базу данных Cassandra так быстро, как это возможно? – Pointless

+0

Пакет Cassandra не подразумевает многопоточность (или скорость). Вы сбиваете с толку инструкцию SQL вставки SQL с пакетом c *. Пакеты C * предназначены для воспроизведения «транзакций» (здесь слово здесь свободно, так как это не означает то же, что и SQL). Они определенно не то же самое. Если вы хотите вставить большие коллекции в cassandra, в вашем драйвере есть различные шаблоны асинхронного выполнения, которые вы могли бы использовать. – kha

ответ

6

Пакетные заявления не maded для массовой загрузки в Кассандре, в C# faq Datastax явно рекомендуют иметь размер партии в порядке десятков.

Если вы хотите вставить много данных в свой случай, вы должны regular or async statements сделать это.

+1

Плюс один от меня. «Whys» позади использования пакетных операторов является одной из наиболее распространенных точек путаницы для новых разработчиков, использующих Cassandra. Он предназначен для атомарности, * не * производительности. – Aaron