2016-01-22 2 views
1

Я использую Cassandra 2.1.12 для хранения данных о событиях в семействе столбцов. Ниже приведен код C# для создания клиента для .net, который управляет соединениями из Cassandra. Теперь проблема в скорости ввода/обновления данных очень высока. Итак, скажем, я увеличиваю значение столбца в Cassandra при последующем запросе. Но, как я сказал, скорость вставки/обновления очень высока. Поэтому в моем кластере из 3 узлов, если в первый раз я напишу значение столбца, будет 1, а затем в следующем запросе я прочитаю значение этого столбца и обновит его до 2. Но если значение, полученное с другого узла, где значение имеет не инициализируется до 1. Затем снова значение будет храниться как 1. Итак, теперь, чтобы решить эту проблему, я также сохранил значение consistency как QUORUM. Но проблема все еще сохраняется. Может ли кто-нибудь сказать мне возможное решение для этого?Избегайте грязного чтения и записи в cassandra

 private static ISession _singleton; 

     public static ISession GetSingleton() 
     { 
      if (_singleton == null) 
      { 
       Cluster cluster = Cluster.Builder().AddContactPoints(ConfigurationManager.AppSettings["cassandraCluster"].ToString().Split(',')).Build(); 
       ISession session = cluster.Connect(ConfigurationManager.AppSettings["cassandraKeySpace"].ToString()); 
       _singleton = session; 
      } 
      return _singleton; 
     } 
+0

Надеюсь, QUORAUM написано неправильно ?, орфография должна быть QUORUM –

+0

@HarishShan Извините, на кластере правописание было правильным. Здесь, набрав вопрос, я написал это неверно. – Naresh

ответ

1

Нет, Это не представляется возможным для достижения своей цели в Кассандре. Причина в том, что каждое распределенное приложение относится к CAP theorem. В соответствии с этим, cassandra does not have Consistency.

enter image description here

Так что в вашем случае, вы пытаетесь обновить тот же ключ для раздела много времени в многопоточных среде, поэтому не гарантируется, чтобы увидеть последние данные во всех потоках. Если вы попытаетесь с небольшим интервальным интервалом, вы можете увидеть последние данные во всех потоках. Если ваше требование состоит в том, чтобы увеличивать/уменьшать целые числа, тогда вы можете пойти с cassandra counters. Но, тем не менее, счетчик cassandra не поддерживает получение обновленного значения с помощью одного запроса. Это означает, что вы можете получить запрос на увеличение счетчика и получить отдельный запрос для получения обновленного значения. Невозможно увеличить прирост и получить добавочное значение в одном запросе. Если вам нужно только увеличивать значение (например, подсчитывать количество просмотров страницы), вы можете пойти с счетчиками cassandra. Счетчики Cassandra не пропустят никаких приращений/декрементов. Фактически вы можете увидеть фактические данные. Надеюсь, поможет.

+0

Подробнее о c * счетчиках здесь http://www.datastax.com/dev/blog/whats-new-in-cassandra-2-1-a-better-implementation-of-counters Вы все еще можете считать или подсчитывать на тайм-аутах на основе вашей политики повторных попыток. Поэтому будьте осторожны, чтобы вариант использования допускал некоторые недостатки. – phact

 Смежные вопросы

  • Нет связанных вопросов^_^