Mongodb: Co warto wiedzieć przed użyciem? [Zamknięte]


93

Rozpoczynam projekt hobbystyczny (niezarobkowy) przy użyciu Ruby on Rails. Zrobiłem sporo rozwoju w Railsach przy użyciu Postgresql i mogę zrobić całkiem niezłą imitację znormalizowanego schematu. Jednak Mongrodb wygląda błyszcząco i nowocześnie. Co lepszego do wypróbowania czegoś nowego niż projekt hobby?

Przypomnij sobie, kiedy zacząłeś używać Mongodb. Jakich technik nauczyłeś się później, że powiedziałeś: „Gdybym tylko wiedział, kiedy zacząłem!” Z jakich wtyczek odkryłeś, że użyłbyś od razu, gdybyś wiedział? Jakie referencje chciałbyś umieścić w zakładce?

Odpowiedzi:


63

Zdecydowanie poparłbym zalecenie MongoMapper, jeśli zamierzasz używać MongoDB z Railsami. Ostrzegam jednak, że nie ma (jak dotąd) żadnej dokumentacji poza kilkoma wpisami na blogu. Jeśli nie czujesz się komfortowo zagłębiając się w kod źródłowy, aby zobaczyć, jak to działa, prawdopodobnie jeszcze nie jest dla Ciebie.

Jeśli pracujesz poza Railsami, polecam trzymać się z dala od MongoMapper. Ponieważ działa z MongoDB w coś podobnego do tego, czego oczekujemy od ORM wspieranego przez SQL, tak naprawdę nie daje dobrego wyobrażenia o sile i odmiennym sposobie myślenia stojącym za MongoDB. Poświęć trochę czasu na zabawę z rubinowym sterownikiem niższego poziomu, a nawet w konsoli javascript.

Inną rzeczą, którą bym polecił, zwłaszcza że wspomniałeś, że wiesz, jak znormalizować schemat, jest na razie nie myślenie o MongoDB jako bazie danych. Sposób organizowania danych w MongoDB jest zupełnie inny niż w przypadku relacyjnej bazy danych. Spróbuj pomyśleć o tym bardziej jako o miejscu do przechowywania i pobierania skrótów Ruby. Możesz zrobić kilka rzeczy związanych z MongoDB, ale radziłbym trzymać się tylko samodzielnych dokumentów, gdy próbujesz ogarnąć głowę NoSQL.

Jeśli chodzi o linki, na które powinieneś spojrzeć, gorąco polecam przeczytanie wszystkiego, co możesz w witrynie MongoDB. Ich dokumentacja jest bardzo dobra. W szczególności przyjrzyj się zaawansowanym zapytaniom , indeksom wieloprzyciskowym i MapReduce, aby zorientować się w niektórych wyjątkowych zaletach i zaletach bazy danych NoSQL.


26

Jestem prawie na tym samym etapie co ty. Rozpoczynanie nowego projektu z MongoDB. Mam około 7 tygodni doświadczenia. Oto, co uznałem za bardzo przydatne:

Użyj Mongoid zamiast Mongomapper

http://mongoid.org/

Dokumentacja jest doskonała. Poważnie, świetnie. Przeczytanie całej dokumentacji powinno zająć około 15 minut, a będziesz mieć bardzo dokładne pojęcie o tym, co możesz zrobić, a czego nie możesz zrobić z Mongoidem.

Jutro zostanie wydany kandydat do wydania nowej głównej wersji mongoid. Przyniesie wiele pożytecznych rzeczy.

Używam Rails 3. Aby zainstalować wersję rozwojową, dodaj to do pliku gem:

klejnot 'mongoid', "~> 2.0.0.beta"

Obecna beta to 20, ale jak powiedziałem, jutro pojawi się kandydat do wydania.

Proponuję również, abyś dołączył do grupy Google. Ma mały ruch i ludzie bardzo chętnie odpowiadają na każde pytanie. Na przykład pokazałem im mój pierwszy projekt DB Model i dali mi wiele sposobów na ulepszenie tego. Twórca Mongoid również odpowie na Twoje pytania.

W dwóch słowach: wspaniała społeczność.

Jest taka wtyczka, która umożliwia korzystanie z Machinist z mongo:

https://github.com/nmerouze/machinist_mongo

Działa całkiem dobrze.

gem 'machinist_mongo', :require => 'machinist/mongoid', 
:git => 'http://github.com/nmerouze/machinist_mongo.git',
:branch => 'machinist2'

Możesz użyć Fałszerstwa z Machinistą. Niesamowita mieszanka.

https://github.com/sevenwire/forgery

Jeszcze jedna rzecz, którą chcę powiedzieć. Pochodzę ze świata relacyjnych baz danych, więc na początku brzmiało to naprawdę dziwnie: Możesz zapisywać pliki w bazie danych mongo.

W rzeczywistości mogłoby to być szybsze niż zarządzanie nimi tak, jak to robiliśmy. Dzieje się tak z powodu wsparcia dla shardingu przez mongo. Sharding oznacza, że ​​możesz używać klastra komputerów do obsługi bazy danych Mongo. Jest bezproblemowa. Master-slave. Możesz więc udostępniać plik z wielu komputerów, z których każdy wysyła część. Bardzo dobrze się skaluje :)

Odbywa się to za pomocą GridFS. http://www.mongodb.org/display/DOCS/GridFS

Mongoid obsługuje tę konfigurację master-slave.

Zapytaj mnie, jeśli potrzebujesz więcej informacji.

Edytować:

Również: http://railscasts.com/episodes/238-mongoid


8

1. Zapytaj, czy wielkość liter nie jest rozróżniana

eq

"_id": "1da259c70fe3392c3b000002",
"name": "Dany"

array('name' => 'dany') :: results 0
array('name' => 'Dany') :: results 1

2. Identyfikator ostatniego wstawienia:

$coll->insert($user, true);
echo (string) $user['_id'];

3. _id jest obiektem MongoId

Znajdź według identyfikatora:

$p->findOne(array('_id' => new MongoId( $UID  )), array('proj'));

Pokaż _id:

$coll['_id'] = ( string ) $coll['_id'];

Ponadto _id jest unikatowy tylko dla każdej kolekcji, może być inny na innym serwerze

4. MongoDB obsługuje LIMIT, OFFSET, ORDER

w przypadku sortowania z wyprzedzeniem można użyć struktury agregacji.

5. W SQL iniekcja Sql w MongoDB jest iniekcją tablicy

Więc kiedy piszesz jakieś dane, użyj (string) lub sprawdź is_array

$req = (string) $range['name'];

6. HDD DOS

domyślny rozmiar _POST to 8MB w PHP, w Mongo istnieje limit 16MB na dokument. Wyobraź sobie więc, że ktoś podszywa się pod eq USER_AGENT STRING w swoim skrypcie analitycznym, a następnie wysyła 16 MB na pojedynczą wstawkę.

7. W przeszłości występowały problemy z MongoDb, ale obecnie 3.0 jest całkiem niezły i stabilny.


3

Oto świetny początek / wprowadzenie do podcastu MongoDb z .NET Rocks -

http://www.dotnetrocks.com/default.aspx?ShowNum=507

Mike Dirolf jest przesłuchiwany ... pracuje nad projektem MongoDb. Aha, i jakość dźwięku jest doskonała.

Mike Dirolf jest inżynierem oprogramowania w 10gen, gdzie pracuje nad projektem MongoDB. Pracuje głównie nad sterownikami klienckimi dla Pythona i Ruby, ale także poświęca czas na rozmowy o MongoDB - prezentował na EuroPython, Strange Loop Conf, RubyEnRails, RuPy i RubyConf, a także na grupach spotkań w Nowym Jorku, Londynie, Waszyngtonie. DC i San Francisco.


2

Powinieneś definitywnie przyjrzeć się junemakers mongo-mapper: http://github.com/jnunemaker/mongomapper Ale polecam też trochę pobawić się z czystym sterownikiem Ruby Mongo, aby zobaczyć, jak mongo-mapper działa pod maską. Umieszczenie niektórych danych w bazie danych Mongo przy użyciu Rubiego nie jest trudne.

Wydaje mi się, że znalazłeś już samouczek dotyczący Ruby Mongo. Na wszelki wypadek, tutaj jest link: http://www.mongodb.org/display/DOCS/Ruby+Tutorial


Wierz lub nie, ale nie było tego w linkach, które ustawiłem w kolejce do przeczytania, i wygląda na dobre. Dzięki.
Wayne Conrad
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.