Хранение данных в Кассандре - PullRequest
1 голос
/ 30 января 2012

В настоящее время я борюсь с правильным форматом данных для использования с Cassandra. Я предполагаю, что это из-за дополнительной глубины, которую он предлагает по сравнению со стандартными хранилищами ключ-значение.

Мой формат данных в настоящее время определен так:

  • Пространства ключей для различных приложений.
  • Семейства столбцов для различных частей приложения.
  • В этих семействах столбцов у меня есть данные.

Большая часть данных хранится в одном семействе столбцов в формате:

Key: UUID-1|UUID-2|UUID-3
Value: Array of PHP Values

После вставки нескольких 100 000 записей (<1 КБ каждая) я вижу снижение производительности при чтении данных. </p>

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

Стоит ли разбивать мои данные на разные семейства столбцов или это правильный подход, но что-то еще может быть причиной проблемы?


Изменить, чтобы ответить на вопросы ДНК в комментарии:

Я сравниваю время чтения, необходимое для одного ключа, который я вставил перед началом моих тестов.

Тестовый ключ последовательно считывался в течение <0,0010 с> 1000 раз в начале, пока база данных еще пуста. Данные, записанные в тестах, структурированы так:

  • Строка, идентифицируемая Ключом, построенная из 5 символов + 20 чисел
  • с одним столбцом (1 символ), содержащим текущую метку времени Unix

Я добавил записи и повторно запустил тот же тест чтения, чтобы сравнить время чтения. Время чтения, которое я перечисляю здесь, является нижними числами:

   Entries | Read Time
         0 |   0.0010
   150.000 |   0.0013
   300.000 |   0.0014
   500.000 |   0.0016
   750.000 |   0.0019
 1.000.000 |   0.0022

Поскольку это только для базового тестирования, оно выполняется только на одном узле (экземпляр ec2) в Amazon. Кажется, что время чтения увеличивается примерно на 0,0003 с на каждые 250 000 новых строк.

Я знаю, что это действительно небольшие числа, и они велики, но линейное увеличение времени чтения не то, что я ожидал.

Я планирую перенести большой сервер MySQL с огромным количеством маленьких записей в Кассандру. В настоящее время он содержит около 75 миллиардов записей, и количество новых наборов данных, которые он собирает, действительно быстрое, поэтому линейное увеличение времени чтения заставляет меня задуматься, движусь ли я в правильном направлении.

1 Ответ

2 голосов
/ 01 февраля 2012

Спасибо за обновление вопроса.

Вероятно, вам следует прочитать эту статью о тестировании Netflix .

Сравнительный анализ с относительно небольшим количеством строк не скажет вамчто-нибудь о масштабируемости для больших наборов данных.Нетрудно выполнить этот вид теста для многих миллионов строк.

Если вы сейчас только тестируете, вам, вероятно, следует перейти на ветку 1.0 (в настоящее время 1.0.7), поскольку это значительно быстрее, чем0.7.

Производительность на облачных серверах может не сильно отражать производительность на реальном локальном оборудовании, хотя облачные серверы - отличная идея для кластерного тестирования.См. http://wiki.apache.org/cassandra/CassandraHardware

Если задержка чтения является вашей ключевой проблемой, убедитесь, что вы знакомы с настройками кэша в Cassandra (keys_cached и row_cached) - см., Например, http://wiki.apache.org/cassandra/StorageConfiguration,.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...