Ну, так как никто больше не пытался ответить на этот вопрос, я выскажу свое мнение. Имейте в виду, что я никогда не использовал protobuf (именно поэтому я еще не ответил), так что все это просто основано на моем свободном понимании вещей и как, если бы у меня была эта проблема, чтобы решить, я продолжил бы.
Во-первых, у меня есть сомнения по поводу вставки больших двоичных объектов в реляционную базу данных. Это может вернуться к моему плохому опыту, еще во времена каменного века VB6, и может быть недействительным, но это все равно дает мне паузу. Таким образом, я бы, вероятно, исследовал некоторые другие механизмы хранения объектов (например, Perst или db4o ), прежде чем пытаться его.
Из-за должной осмотрительности я бы, по крайней мере, добавил профильные вставки в базу данных SQLCE. Почему SQLCE вместо SQlLite или какой-то другой RDMS? Ну, потому что SQLCE поддерживает TableDirect, который я огромный фанат. В любой момент, когда вы можете получить доступ к данным, не используя медленный процессор запросов, вы далеко впереди.
Итак, я бы создал таблицу, дал бы ей пару небольших столбцов для поиска, по которым я мог бы искать, затем столбец изображения, содержащий некоторый большой двоичный двоичный объект (сам по себе двоичный объект не подходит для теста, но он должен быть достаточно близким по размеру к тому, что вы ожидаете в производстве). Затем я бы добавил индексы для каждого столбца поиска.
Я бы заполнил таблицу несколькими тысячами записей, а затем профилировал бы скорость, с которой я мог бы искать нужный ключ (я знаю, что это быстро), и, что более важно, скорость, с которой я могу повторно увлажнять свои объекты.
Затем я бы взвесил затраты (время на разработку, альтернативные затраты, возможности для повторного использования и т. Д.) Вариантов и принял бы решение. Я бы, наверное, тоже писал о результатах, так как это кажется проблемой, которая представляет довольно широкий интерес.