РЕДАКТИРОВАТЬ: я забыл, что вы работаете в C #.
Прежде всего, планируете ли вы запрашивать базу данных с более чем одного компьютера? Если это так, вы хотели бы использовать MySQL. В противном случае, SQLite, вероятно, является хорошим выбором. Но обратите внимание, что MySQL, вероятно, необходим для нескольких приложений C # и базы данных в памяти. Если вы выбираете MySQL, используйте MySQL Connector / NET . Для SQLite существует System.Data.SQLite (который я использовал для приложения WinForms и могу рекомендовать).
Вы говорите, что должны делать 1500 операторов вставки 200 байтов для каждого оператора. SQLite сообщает , что он может делать 50 000 в секунду. Ключевое предостережение заключается в том, что это относится к необработанным вставкам, а не транзакциям. Фиксация транзакции замедляет работу, поскольку обычно это означает сброс на диск.
И SQLite (см. Их Базы данных в памяти ), и MySQL (см. Их MEMORY (HEAP) Storage Engine ) могут использовать базы данных в памяти. Тем не менее, для SQLite это может нанести ущерб вашей цели - предоставить «нескольким приложениям» доступ к нему. В SQLite существует недокументированный (и «не гарантированный, что он будет работать в будущих выпусках SQLite») способ, которым вы сможете совместно использовать базы данных в памяти (например, используя разделяемую память). Это обсуждалось в предыдущем вопросе SO ; см. также связанное почтовое сообщение от основного автора SQLite. Обратите внимание, что совместное использование базы данных SQLite в памяти, вероятно, будет невозможно, если вы будете придерживаться управляемого кода. Вы можете определенно иметь базу данных MySQL в памяти, совместно используемую несколькими клиентами.
Используя любой клиент C #, вы должны иметь возможность вставить весь пакет в одну строку с DbParameter (т.е. SQLiteParameter или MySqlParameter). Обратите особое внимание на свойства Value и Size.
Я не думаю, что вам нужен какой-либо "тип массива". Вы можете просто иметь увеличивающийся столбец первичного ключа (INTEGER PRIMARY KEY) и столбец содержимого пакета (BLOB или TEXT). Я не уверен, какой из BLOB или TEXT даст вам лучшую производительность для SQLite. Ваша схема SQLite может выглядеть как
CREATE TABLE packets ( id INTEGER PRIMARY KEY, packet BLOB);
Затем вы можете легко выбрать, например, пакеты в пределах определенного диапазона первичных ключей. Конечно, вы можете добавить столбец datetime, но это потребует индексации. Для MySQL это будет что-то вроде:
CREATE TABLE packets ( id INTEGER PRIMARY KEY, packet VARCHAR(200)) ENGINE=MEMORY;
Надеюсь, это поможет. Имейте в виду, что профилирование - это лучший способ убедиться, что хорошо работает для вашего приложения.