Используйте BasicDBObjectBuilder для преобразования вашего POJO в экземпляр DBObject , который DBCollection может сохранить:
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
public class Employee {
private long no;
private String name;
// Getters and Setters
public DBObject toDBObject() {
BasicDBObjectBuilder builder = BasicDBObjectBuilder
.start("no", no)
.append("name", name);
return builder.get();
}
}
Для того, чтобы сохранить, просто вызовите toDBObject()
для экземпляра POJO и предоставьте его в коллекцию:
public class test {
public static void main(String[] args) throws UnknownHostException,
MongoException {
...
DBCollection dbCollection = db.getCollection("NameColl");
Employee employee = new Employee();
employee.setNo(1L);
employee.setName("yogesh");
dbCollection.save(employee.toDBObject());
}
}
Используя этот подход:
DBObject
каждый раз Любой целочисленный тип достаточного размера для хранения ожидаемых диапазонов данных. Обычно 32-битные целые числа считаются слишком маленькими (правильно или ошибочно) для таблиц с большим количеством строк или изменений. 64-битного int достаточно. Многие базы данных не имеют или не будут использовать этот целочисленный тип, но будут использовать тип ЧИСЛО с указанным масштабом и точностью. 10-15 цифр - довольно распространенный размер.
Целочисленные типы выбирают по двум причинам:
Размер целого числа:
Сравните это с GUID , который составляет 128 бит или обычную строку, который составляет по крайней мере один байт на символ (больше в некоторых кодировках символов) плюс накладные расходы, которые могут составлять всего один байт (завершение нулем) или могут быть намного больше в некоторых случаях.
Сортировка целых чисел тривиальна и, если они уникальны, а диапазон достаточно мал, фактически может быть выполнено за O (n) время по сравнению, в лучшем случае, с O (n log n).
также, что не менее важно, большинство баз данных могут генерировать уникальные идентификаторы с помощью столбцов и / или последовательностей с автоинкрементом. В противном случае гарантировать уникальность в приложении довольно сложно и, как правило, приводит к раздуванию ключей.
Плюс автоматически сгенерированные целочисленные ключи обычно либо слабо, либо абсолютно упорядочены (в зависимости от базы данных и конфигурации), что является полезным качеством. Случайно сгенерированные идентификаторы GUID в основном неупорядочены, что гораздо менее полезно.
предполагая, что они уникальны и диапазон достаточно мал, на самом деле может быть выполнено за O (n) время по сравнению с, в лучшем случае, O (n log n).также, что не менее важно, большинство баз данных могут генерировать уникальные идентификаторы с помощью автоприращения столбцов и / или последовательностей. В противном случае гарантировать уникальность в приложении довольно сложно и, как правило, приводит к раздуванию ключей.
Плюс автоматически сгенерированные целочисленные ключи обычно либо слабо, либо абсолютно упорядочены (в зависимости от базы данных и конфигурации), что является полезным качеством. Случайно сгенерированные идентификаторы GUID в основном неупорядочены, что гораздо менее полезно.
предполагая, что они уникальны и диапазон достаточно мал, на самом деле может быть выполнено за O (n) время по сравнению с, в лучшем случае, O (n log n).также, что не менее важно, большинство баз данных могут генерировать уникальные идентификаторы с помощью автоприращения столбцов и / или последовательностей. В противном случае гарантировать уникальность в приложении довольно сложно и, как правило, приводит к раздуванию ключей.
Плюс автоматически сгенерированные целочисленные ключи обычно либо слабо, либо абсолютно упорядочены (в зависимости от базы данных и конфигурации), что является полезным качеством. Случайно сгенерированные идентификаторы GUID в основном неупорядочены, что гораздо менее полезно.
В противном случае гарантировать уникальность в приложении довольно сложно и, как правило, приводит к раздуванию ключей.Плюс автоматически сгенерированные целочисленные ключи обычно либо слабо, либо абсолютно упорядочены (в зависимости от базы данных и конфигурации), что является полезным качеством. Случайно сгенерированные идентификаторы GUID в основном неупорядочены, что гораздо менее полезно.
В противном случае гарантировать уникальность в приложении довольно сложно и, как правило, приводит к раздуванию ключей.Плюс автоматически сгенерированные целочисленные ключи обычно либо слабо, либо абсолютно упорядочены (в зависимости от базы данных и конфигурации), что является полезным качеством. Случайно сгенерированные идентификаторы GUID в основном неупорядочены, что гораздо менее полезно.
Популярные базы данных позволяют использовать большие поля автоинкремента в течение многих лет, так что это гораздо менее проблема.
Что касается того, что использовать, это всегда выбор. Одно не ясно лучше , чем другое, у них разные характеристики, и каждый из них хорош в разных сценариях. Я использовал и то, и другое с течением времени, и в следующей схеме, с которой я работаю, я рассмотрю оба.
Плюсы GUID:
Плюсы автоинкремента:
Большой недостаток использования ключей GUID заключается в том, что его трудно выполнять «специальные» запросы вручную. Иногда очень полезно сделать это:
SELECT * FROM User, где UserID = 452245
С ключами GUID это может стать очень раздражающим.
Я бы рекомендовал 64-битные целые числа
Скажите, какие критерии вы считаете важными.
Требуется , чтобы быть уникальным в таблице.
GUID - это глобальный вероятностно-уникальный идентификатор . Тоже большой. Если вам нужно, чтобы ваши индексы были уникальными с точностью до эпсилона по сравнению с любой другой установкой базы данных во вселенной, это хороший выбор. В противном случае он использует излишне много места.
Автоинкремент - это хорошо; он маленький и обязательно будет уникальным в пределах таблицы. С другой стороны, это не дает вам защиты от дублирования; две записи, идентичные за исключением магического числа, легко создать.
Использование некоторого значения, связанного с описываемой сущностью, позволяет избежать этого, но у вас возникает проблема с уникальностью.
Если вы используете long, вы можете создать более 1000 в секунду и не использовать первичные ключи в течение 29 миллионов лет.
Другие уже упоминали некоторые преимущества использования целого числа введите вместо UUID / GUID. Одно из больших преимуществ - скорость и компактность индексов.
В приложении, в котором я недавно участвовал, где я занимался проектированием базы данных, мне нужны были UUID, но я не хотел отказываться от преимуществ использования long для первичных keys, поэтому у меня была таблица allIds, которая сопоставляла каждый первичный ключ в системе с UUID. Все мои первичные ключи были сгенерированы из одной последовательности, поэтому все они были уникальными для всех таблиц.
Если база данных распределена, где вы можете получать записи из других баз данных, первичный ключ должен быть уникальным в таблице для всех баз данных . GUID решает эту проблему, хотя и за счет экономии места. Комбинация автоинкремента и пространства имен была бы хорошим компромиссом.
Было бы хорошо, если бы базы данных могли обеспечивать встроенную поддержку автоинкрементов с «префиксами». Итак, в одной базе данных я получаю такие идентификаторы, как X1, X2, X3 ... и так далее, тогда как в другой базе данных это могут быть Y1, Y2, Y3 ... и так далее.
I asked a similar question which has a few answers that might help. Replication seems to be the biggest advantage of using GUIDs.
Reasons not to use an auto-incrementing number for a primary key
Follow Cletus's advice, with the additional caveat of it largely depends on what your storting. Never, ever, use a GUID. GUID's have a whole bundle of downsides, and only one or two upsides.