Play Mongodb
-
Upload
infinity -
Category
Investor Relations
-
view
482 -
download
0
description
Transcript of Play Mongodb
Play with mongodb
By: Wladislaw Merezhko
Mongodb is
● NoSQL● Простота та потужність ● Документ орієнтована (json/bson)● Вбудовані документи та масиви● Динамічна схема● Простота масштабування ● Повна підтримка індексації
Філософія Mongodb
● Простота розробки● Горизонтальне масштабування● Документна модель (JSON) ● Працювати будь-де● Чотири основні риси
- гнучкість- потужність- швидкодія- простота у використанні
Документи vs Таблиць
● Документи зберігаються у колекціях● Колекції входять до складу баз даних● Колекції подібні до таблиць● Документи до записів у таблиці● Документи можуть мати різні поля
Звичайна таблиця
CREATE TABLE customer (First_Name char(50), Last_Name char(50), Date_of_Birth date);
INSERT INTO customer (First_Name, Last_Name, Date_of_Birth) VALUES ('Jean', 'Dumont', '1963-01-22'),('Franck', 'Pellerin', '1983-09-19'),('Dustin', 'Gannon', '1982-11-12');
Звичайна колекція
{ "_id": ObjectId("4efa8d2b7d284dad101e4bc9"),
"Last Name": "DUMONT", "First Name": "Jean", "Date of Birth": "01-22-1963"},
{ "_id": ObjectId("4efa8d2b7d284dad101e4bc7"),
"Last Name": "PELLERIN", "First Name": "Franck", "Date of Birth": "09-19-1983", "Address": "1 chemin des Loges", "City": "VERSAILLES"}
Звичайна колекція
{"_id":ObjectId("4efa8d2b7d284dad101e4bc7"),
"Last Name": "PELLERIN", "First Name": "Franck", "Date of Birth": "09-19-1983", "Address": {
"Street": "1 chemin des Loges", "City": "VERSAILLES"
}}
Запити
● Створити новий документу у новій колекції
> db.users.insert({ _id : "alex", name: {
first:"Alex",last:"Benisson" },
karma : 1.0 });
Запити
> j = {name: "mongo"}; {"name":"mongo"}> t = { x : 3 }; { "x" : 3 }> db.things.save(j); > db.things.save(t);> db.things.find(); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
Запити
SELECT j FROM things WHERE x=4
>db.things.find({x:4},{j:true});{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "j" : 2 } ...
Запити
● Атомарна операція зміни
> db.posts.update({_
id:ObjectId("4e77b3b8a3...a"),voters: { $nin: "calvin" }
},{
votes: { $inc: 1 },voters: { $push: "calvin" }
});
Реплікації та шардинг
● Два види реплікацій
Реплікації та шардинг
● Надійне сховище
Типове застосування
● Найкраще підходить для
● Зтиснення та зберігання логів● CMS системи● Електрона комерція● Ігри● Мобільні платформи● Аналітика та статус у реальному часі
Типове застосування
● Погано підходить для
● Великих та складних транзакційних систем● Проблем вимагаючих реляційних зв’язків● Проблем потребуючих SQL
Проекти що використовуют
● Craigslist● MTV Networks’ next-generation CMS● Intuit● bit.ly● Wordnik● Harmony
Play (1.2.3) is
● Чиста альтернатива роздутому джава інтерпрайз стеку
● Фокусується на продуктивній розробці● Ідеально підходить для аджайл ● Дозволяє використовувати інструменти
розробки та бібліотеки● http://www.playframework.org
Структура проекту
app - controllers - modules - viewsconfdata.ymllibmodulespublictest
PlayMorphia is
● Інструмент інтеграції монго у плей● Швидкодія і простота● POJO● Вбудовані обєкти та посилання● GridFS● Атомарні операції
Приклад
● $eq● $ne● $gt, $lt, $gte, $lte● $in● $nin
● $size● $type● $elemMatch● $exists● $all
Приклад
List<User> users = User.q().filter("department eq", "IT"
).asList();
● is exactly the same as
List<User> users = User.q().filter("department", "IT"
).asList();
Приклад
@Entity public class MTB extends Model { public String email; public String password; public String fullname; public boolean isAdmin; public MTB(String email, String password, String fullname){ this.email = email; this.password = password; this.fullname = fullname; }}
Приклад
// define the embedded class@Embedded public class Address { public String streetNo; public String state; …} // define the embedding class@Entity public class Customer extends Model { @Embedded public Address address;}
Приклад
● Отримати всі
List<MTB> mtbs = MTB.find().asList();
● Створити новий
MTB mtb = new MTB("[email protected]", "John", "Doe");
mtb.save();
Приклад
List<User> johns = User.q().filter("firstName",
Pattern.compile("john",Pattern.CASE_INSENSITIVE)
).asList();
Приклад
List<User> users = Users.find( "address.street, address.city, address.country","FuXingJie", "DuJiangYan", "China"
).asList();
Запитання?
Дякую за увагу