Play Mongodb
-
Upload
infinity -
Category
Investor Relations
-
view
482 -
download
0
description
Transcript of Play Mongodb
![Page 1: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/1.jpg)
Play with mongodb
By: Wladislaw Merezhko
![Page 2: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/2.jpg)
Mongodb is
● NoSQL● Простота та потужність ● Документ орієнтована (json/bson)● Вбудовані документи та масиви● Динамічна схема● Простота масштабування ● Повна підтримка індексації
![Page 3: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/3.jpg)
Філософія Mongodb
● Простота розробки● Горизонтальне масштабування● Документна модель (JSON) ● Працювати будь-де● Чотири основні риси
- гнучкість- потужність- швидкодія- простота у використанні
![Page 4: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/4.jpg)
Документи vs Таблиць
● Документи зберігаються у колекціях● Колекції входять до складу баз даних● Колекції подібні до таблиць● Документи до записів у таблиці● Документи можуть мати різні поля
![Page 5: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/5.jpg)
Звичайна таблиця
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');
![Page 6: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/6.jpg)
Звичайна колекція
{ "_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"}
![Page 7: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/7.jpg)
Звичайна колекція
{"_id":ObjectId("4efa8d2b7d284dad101e4bc7"),
"Last Name": "PELLERIN", "First Name": "Franck", "Date of Birth": "09-19-1983", "Address": {
"Street": "1 chemin des Loges", "City": "VERSAILLES"
}}
![Page 8: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/8.jpg)
Запити
● Створити новий документу у новій колекції
> db.users.insert({ _id : "alex", name: {
first:"Alex",last:"Benisson" },
karma : 1.0 });
![Page 9: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/9.jpg)
Запити
> 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 }
![Page 10: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/10.jpg)
Запити
SELECT j FROM things WHERE x=4
>db.things.find({x:4},{j:true});{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "j" : 2 } ...
![Page 11: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/11.jpg)
Запити
● Атомарна операція зміни
> db.posts.update({_
id:ObjectId("4e77b3b8a3...a"),voters: { $nin: "calvin" }
},{
votes: { $inc: 1 },voters: { $push: "calvin" }
});
![Page 12: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/12.jpg)
Реплікації та шардинг
● Два види реплікацій
![Page 13: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/13.jpg)
Реплікації та шардинг
● Надійне сховище
![Page 14: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/14.jpg)
Типове застосування
● Найкраще підходить для
● Зтиснення та зберігання логів● CMS системи● Електрона комерція● Ігри● Мобільні платформи● Аналітика та статус у реальному часі
![Page 15: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/15.jpg)
Типове застосування
● Погано підходить для
● Великих та складних транзакційних систем● Проблем вимагаючих реляційних зв’язків● Проблем потребуючих SQL
![Page 16: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/16.jpg)
Проекти що використовуют
● Craigslist● MTV Networks’ next-generation CMS● Intuit● bit.ly● Wordnik● Harmony
![Page 17: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/17.jpg)
Play (1.2.3) is
● Чиста альтернатива роздутому джава інтерпрайз стеку
● Фокусується на продуктивній розробці● Ідеально підходить для аджайл ● Дозволяє використовувати інструменти
розробки та бібліотеки● http://www.playframework.org
![Page 18: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/18.jpg)
Структура проекту
app - controllers - modules - viewsconfdata.ymllibmodulespublictest
![Page 19: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/19.jpg)
PlayMorphia is
● Інструмент інтеграції монго у плей● Швидкодія і простота● POJO● Вбудовані обєкти та посилання● GridFS● Атомарні операції
![Page 20: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/20.jpg)
Приклад
● $eq● $ne● $gt, $lt, $gte, $lte● $in● $nin
● $size● $type● $elemMatch● $exists● $all
![Page 21: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/21.jpg)
Приклад
List<User> users = User.q().filter("department eq", "IT"
).asList();
● is exactly the same as
List<User> users = User.q().filter("department", "IT"
).asList();
![Page 22: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/22.jpg)
Приклад
@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; }}
![Page 23: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/23.jpg)
Приклад
// 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;}
![Page 24: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/24.jpg)
Приклад
● Отримати всі
List<MTB> mtbs = MTB.find().asList();
● Створити новий
MTB mtb = new MTB("[email protected]", "John", "Doe");
mtb.save();
![Page 25: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/25.jpg)
Приклад
List<User> johns = User.q().filter("firstName",
Pattern.compile("john",Pattern.CASE_INSENSITIVE)
).asList();
![Page 26: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/26.jpg)
Приклад
List<User> users = Users.find( "address.street, address.city, address.country","FuXingJie", "DuJiangYan", "China"
).asList();
![Page 27: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/27.jpg)
Запитання?
![Page 28: Play Mongodb](https://reader034.fdocuments.us/reader034/viewer/2022052601/558d1b8ad8b42a78258b45c8/html5/thumbnails/28.jpg)
Дякую за увагу