коды с коррекцией ошибок, нацеленные на медленную передачу центральных процессоров к быстрым центральным процессорам

Когда вставка сгенерированного идентификатора сохраняется в экземпляр сохраняемого объекта (см. ниже):

protected void btnInsertProductCategory_Click(object sender, EventArgs e)
{
  ProductCategory productCategory = new ProductCategory();
  productCategory.Name = “Sample Category”;
  productCategory.ModifiedDate = DateTime.Now;
  productCategory.rowguid = Guid.NewGuid();
  int id = InsertProductCategory(productCategory);
  lblResult.Text = id.ToString();
}

//Insert a new product category and return the generated ID (identity value)
private int InsertProductCategory(ProductCategory productCategory)
{
  ctx.ProductCategories.InsertOnSubmit(productCategory);
  ctx.SubmitChanges();
  return productCategory.ProductCategoryID;
}

ссылка: http://blog.jemm.net/articles/databases/how-to-common-data-patterns-with-linq-to-sql/#4

9
задан Jason S 10 December 2009 в 13:49
поделиться

2 ответа

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

Таким образом, я бы рекомендовал вместо этого разделить ваши потоки данных разбиваются на блоки (максимум 1 КБ, 10 КБ, ... 1 МБ) и вычисляют контрольную сумму для каждого блока. Затем, когда данные поступают на другой ЦП, вы можете убедиться, что они верны, и запросить повторную передачу этого блока, если нет. Таким образом, принимающий компьютер либо подтвердит и дождется следующего блока, либо отрицательно подтвердит и ожидает повторной отправки.

Да, здесь мы реализуем подмножество TCP / IP. Но есть' Причина, по которой этот протокол был настолько успешным: он работает!

В качестве контрольной суммы я бы рекомендовал CRC-32. Для этого требуется таблица из (я думаю) 256 32-битных чисел и некоторых достаточно простых вычислений (в основном индексация массивов, OR и XOR), так что «тупому» процессору довольно легко вычислить.

3
ответ дан 4 December 2019 в 23:06
поделиться

Я не совсем понял, сколько накладных расходов вы можете себе позволить. В своем комментарии вы говорите, что 16-битный код обнаружения / исправления ошибок примерно правильный, но вы не указываете, насколько большой блок вы собираетесь прикрепить к нему. Чтобы иметь смысл, вам, вероятно, следует выразить допустимые накладные расходы в процентах. 16-битное исправление ошибок для 64-битных данных сильно отличается от 16-битного исправления ошибок килобайта данных.

Если вы можете позволить себе что-то вроде 15-20% накладных расходов или около того, вы, вероятно, можете использовать сверточный код с декодером Витерби. Это очень ассиметрично - сверточный кодер довольно прост (в основном сдвиговый регистр с выводами, ведущими к XOR). Действительно большой может использовать 16-битный регистр с полдюжиной или около того XOR.

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

Упоминались турбокоды. Они могут лучше использовать доступную полосу пропускания, чем сверточные коды с декодерами Витерби, но они используют значительно более сложный кодировщик - минимум два сверточных кодера определенного типа (рекурсивные систематические сверточные кодеры). По сути, они, похоже, тоже не соответствуют вашим требованиям.

Размер декодера экспоненциально зависит от размера кодовой группы.

Упоминались турбокоды. Они могут лучше использовать доступную полосу пропускания, чем сверточные коды с декодерами Витерби, но они используют значительно более сложный кодировщик - минимум два сверточных кодера определенного типа (рекурсивные систематические сверточные кодеры). По сути, они, похоже, тоже не соответствуют вашим требованиям.

Размер декодера экспоненциально зависит от размера кодовой группы.

Упоминались турбокоды. Они могут лучше использовать доступную полосу пропускания, чем сверточные коды с декодерами Витерби, но они используют значительно более сложный кодировщик - минимум два сверточных кодера определенного типа (рекурсивные систематические сверточные кодеры). По сути, они, похоже, тоже не соответствуют вашим требованиям.

4
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: