Кто-нибудь нашел эффективный способ хранения значений BSON ObjectId в базе данных SQL?

Мы переносим некоторые данные из MySQL в Mongo и добавляем дополнительные поля в некоторые из наших таблиц БД дляObjectId значение перенесенных объектов данных.

На данный момент мы храним их как varchar (24) latin1_general_ci, который работает отлично.

Однако для эффективного хранения / индексации мы, вероятно, должны преобразовать обратно в 12-байтовое двоичное значение. К сожалению, MySQL, кажется, имеет тольковстроенная целочисленная поддержка до 8 байт, Есть ли другой вариант - бинарный возможно?

Update: Я мигрирую из MySQL, но только определенные таблицы на данный момент. Поэтому я сначала делаю дубликаты объектов в Монго определенной таблицы. Затем я возвращаюсь к любым другим таблицам, оставленным в MySQL, которые имеют ссылки внешнего ключа на этот старый идентификатор таблицы MySQL, и добавляю новое поле ссылки, в котором будет храниться идентификатор объекта Mongo. Затем я удалю исходное поле ссылки BIGINT.

Update 2: Причина, по которой я привел это, состоит в том, что может пройти еще 12 месяцев (или никогда), прежде чем мы переместим эти другие данные, поэтому до тех пор это будет влиять на производительность живого веб-приложения.

 Soren05 янв. 2015 г., 10:19
спасибо за обмен, я делаю то же самое, используя ту же структуру ключа (ObejctId) в MS Sql Server 2012, MongoDb, ...
 Sergio Tulentsev11 июн. 2012 г., 13:01
Вы мигрируете?from MySQL илиto Это?

Ответы на вопрос(1)

Решение Вопроса

0..79228162514264337593543950335 (Максимум 29 цифр); в соответствии с документами (тот же URL, который вы указали),DECIMAL/NUMERIC столбец упаковывает каждую группу из девяти цифр base10 в четыре байта (в суммеfloor(29 / 9) * 4 = 3 * 4 = 12 байт для первых 27 цифр), оставшиеся 2 цифры занимают дополнительный байт и занимают 13 байт дляDECIMAL(29) колонка.

Или вы можете хранить их какBINARY(12).

 Nic Cottrell11 июн. 2012 г., 14:25
Похоже, двоичный файл (12) может работать хорошо. Я думаю, что драйверы JDBC могут даже автоматически маршалировать шестнадцатеричный ObjectID ...
 21 янв. 2016 г., 07:11
У нас есть программное приложение с 1) веб-компонентом, 2) мобильным компонентом. Наш 1) веб-компонент использует а) MongoDB в качестве базы данных б) ASP.NET C # Наш 2) мобильный компонент использует а) Java б) SQL Lite Однако обе базы данных имеют одинаковые таблицы, но мы не создали любой вид таблицы моста между коллекциями в MongoDB и таблицами в SQL Lite. Верите ли вы, что ваше решение может работать в моем случае?
 21 янв. 2016 г., 11:47
@CSLewis SQLite3 не имеетdecimal тип. Смотря наthe documentationЯ бы сказал, что вы, вероятно, хотите использоватьBLOB тип (который кажется достаточно близким к MySQL)BINARY введите) и сохраните идентификатор объекта в виде двоичного значения, если вы действительно заинтересованы в эффективном хранении, или какTEXT если вам действительно все равно.

Ваш ответ на вопрос