Редактировать несколько сотен сериализованных сообщений Protocol Buffer из базы данных - PullRequest
1 голос
/ 12 апреля 2011

Для операции с моим приложением мне нужно прочитать из базы данных, а затем отредактировать несколько сотен сериализованных сообщений Protocol Buffer . В каждом сообщении PB на самом деле есть 4 int поля и одно boolean поле, а в новом сообщении требуется изменить только логическое поле.

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

Я полагаю, что создание целых сообщений еще раз путем создания builder объектов было бы слишком дорого.

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

Подход с использованием компоновщика должен быть достаточно дешевым, особенно если вы можете выполнить его рядом с сервером, чтобы минимизировать задержку.Однако, если битовое поле имеет первый / последний номер поля, оно должно быть однобайтовым обновлением либо 2-го, либо последнего байта, поэтому может быть возможным в SQL, если хотите.На самом деле, до тех пор, пока вы просто хотите пропустить целые числа (т.е. вам не нужно знать, что они были или поменять их), даже выбрать bool в середине будет довольно легко.

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

1 голос
/ 12 апреля 2011

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

0 голосов
/ 12 апреля 2011

Я предлагаю вам изменить структуру базы данных, чтобы поле в сообщении буфера протокола, которое вы хотите изменить, находилось в отдельном столбце базы данных.Следовательно, вместо сериализации всего сообщения буфера протокола в одном столбце (что, как я полагаю, теперь у вас есть в вашей базе данных), вы бы представляли его другим способом.Тогда вы можете просто использовать простую команду SQL UPDATE.

Я имею в виду, что нет смысла использовать базу данных, предназначенную для реляционного хранилища данных, для хранения сериализованных данных, которые должны бытьобновлено.Это мешает эффективному использованию SQL.

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

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

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