Ответ 1
10MB толкает его, но вы, вероятно, будете в порядке.
Protobuf имеет жесткий предел в 2 ГБ, потому что во многих реализациях используется 32-разрядная арифметика. По соображениям безопасности многие реализации (особенно предоставленные Google) устанавливают ограничение по размеру 64 МБ по умолчанию, хотя вы можете увеличить этот предел вручную, если вам нужно.
Реализация не будет "замедляться" с большими сообщениями как таковыми, но проблема в том, что вы должны всегда разобрать все сообщение сразу, прежде чем сможете начать использовать какой-либо контент. Это означает, что все сообщение должно вписываться в ОЗУ (имея в виду, что после разбора объектов сообщений в памяти намного больше, чем исходное сериализованное сообщение), и даже если вам нужно только одно поле, вам нужно дождаться всего этого разобрать.
Как правило, я рекомендую ограничить себя 1 МБ как правило. Помимо этого, подумайте о разделении сообщения на несколько фрагментов, которые можно разобрать самостоятельно. Тем не менее, каждое приложение - для некоторых - 10 МБ, не имеет большого значения, для других 1 МБ уже слишком велико. Вам нужно будет профилировать собственное приложение, чтобы узнать.
Я действительно видел случаи, когда люди были счастливы отправлять сообщения размером более 1 ГБ, поэтому... он "работает".
На стороне примечания Cap'n Proto имеет очень похожую конструкцию Protobuf, но может поддерживать сообщения до 2 ^ 64 байта (2 ^ 32 сегмента по 4 ГБ каждый), и на самом деле это позволяет вам читать одно поле из сообщения без разбора всего сообщения (если оно находится в файле на диске, используйте mmap()
, чтобы не прочитать все это).
(Раскрытие информации: Я являюсь автором Cap'n Proto, а также большей частью кода Protobuf с открытым кодом Google.)