Jakiego ORM powinienem użyć dla Node.js i MySQL? [Zamknięte]

326

Przepisuję projekt, aby użyć Node.js. Chciałbym nadal używać MySQL jako bazy danych (nawet jeśli nie mam nic przeciwko przepisywaniu schematu). Szukam prostej w obsłudze, rozsądnej wydajności ORM, która obsługuje buforowanie, relacje „jeden do jednego” i „wiele do wielu”. Z MySQL ORM, które udało mi się znaleźć, persistencejs i sequelize wydają się najbardziej dojrzałe. Czy masz doświadczenie z którymkolwiek z nich? Jakie są istotne zalety i wady, o których powinienem wiedzieć w swojej decyzji?

Blisko Privman
źródło
Ale to bardzo interesujący temat. Czy chcesz uzyskać dostęp do zewnętrznych programistów w celu zmiany danych w Twojej witrynie? Czy może lepiej jest utworzyć pośrednią bibliotekę js, która wysyła parametry żądania (metajęzyk) do zaplecza?
sergzach
2
@sergzach Chcesz opracować? Google za „buforowanie hibernacji”.
ponzao
Hm ... Niektóre strony zezwalają na aplikacje użytkownika. Albo cię nie zrozumiałem, przepraszam, proszę.
sergzach
2
@sergzach: Buforowanie jest właściwie dość ważną cechą wielu rozwiązań ORM. Spójrz na przykład na Cayenne.
Nate CK,
Wypróbuj Oreo . github.com/will123195/oreo
Będzie

Odpowiedzi:

101

Czy mogę zasugerować Node ORM?

https://github.com/dresende/node-orm2

Dokumentacja na temat pliku Readme obsługuje MySQL, PostgreSQL i SQLite.

MongoDB jest dostępny od wersji 2.1.x (wydanej w lipcu 2013)

AKTUALIZACJA: Ten pakiet nie jest już obsługiwany, zgodnie z README projektu. Zamiast tego zaleca półkę na książki i kontynuowanie

dresende
źródło
27
Na podstawie dokumentów wygląda na to, że Sequelize wyprzedza ten projekt.
Tony O'Hagan,
To kolejna świetna opcja dla osób szukających mysql ORM. Składnia jest bardziej złożona, ale też ładna.
dresende
2
projekt zmienił adres URL: github.com/dresende/node-orm2
Capy
Podczas próby wdrożenia tego pojawia się błąd „Błąd: Nie można znaleźć„ kapelusza ”modułu. .. wydaje się, że żadna ilość instalacji lub ponownej instalacji npm nie pomaga. Jakieś sugestie? Dzięki
Gene Bo
1
Węzeł-orm2 nie jest już aktywnie utrzymywany. Odsyła do sequelize i bookshelf.js.
seebiscuit
150

Wybrałbym Sequelize ze względu na jego doskonała dokumentacja. To tylko uczciwa opinia (nigdy tak naprawdę nie korzystałem z MySQL z Node).

alessioalex
źródło
10
Chciałbym również zauważyć, że node-orm2 lub persistence.js nie zapewniają mechanizmu migracji. persistence.js nie obsługuje postgres. sequelize robi obie te rzeczy.
airtonix
4
Użyłem node-orm2 i dzięki lepszej dokumentacji Sequelize udało mi się go uruchomić i uruchomić o wiele łatwiej
Michael J. Calkins
2
@Gelidus Skąd masz te informacje?
William Lepinski,
14
Niestety dokumentacja Sequelize stała się ostatnio okropna. Ostatnio zacząłem używać Sequelize i byłem bardzo zadowolony z dokumentów. Teraz jest to automatycznie wygenerowany stos zepsutych linków, nieaktualne informacje i niekompletne przykłady. Nadal będę się z tym trzymać. Nie jest tak trudno się nauczyć.
Brad
2
Właśnie usunąłem mój stary komentarz i teraz w 100% zgadzam się z @Brad, niestety :(
Andrey Popov
19

Po pierwsze, proszę zauważyć, że nie użyłem żadnego z nich (ale użyłem Node.js).

Obie biblioteki są dość dobrze udokumentowane i mają stabilny interfejs API. Jednak trwały.js wydaje się być wykorzystywany w większej liczbie projektów . Nie wiem jednak, czy wszyscy nadal go używają.

Twórca sequelize czasami bloguje o tym na blog.depold.com . Jeśli chcesz używać kluczy podstawowych jako kluczy obcych, potrzebujesz poprawki opisanej w tym poście na blogu . Jeśli potrzebujesz pomocy na temat persistence.js, jest poświęcona temu grupa google.

Z zebranych przykładów wynika, że ​​sekwencjonowanie jest nieco bardziej podobne do JavaScript (więcej cukru) niż persistance.js, ale obsługuje mniej magazynów danych (tylko MySQL, podczas gdy persistance.js może nawet korzystać ze sklepów w przeglądarce).

Myślę, że sekwencjonowanie może być dla ciebie dobrym rozwiązaniem, ponieważ potrzebujesz jedynie wsparcia MySQL. Jeśli jednak potrzebujesz wygodnych funkcji (na przykład wyszukiwania) lub później chcesz użyć innej bazy danych, musisz użyć pliku persistence.js.

hej_lu
źródło
1
wygląda na to, że persistencejs.org wskazuje teraz na niechcianą stronę, działa tylko GitHub
sansknwoledge
10

Jedną z głównych różnic między Sequelize i Persistence.js jest to, że ta pierwsza obsługuje STRINGtyp danych, tj VARCHAR(255). Czułam się naprawdę nieswojo, robiąc wszystko TEXT.

Josh Smith
źródło
7
Obecnie Persistence.js obsługuje również VARCHAR.
alehro,
8
W bazach danych, takich jak PostgreSQL, TEXT i VARCHAR są dokładnie takie same, jedyną różnicą jest to, że jeśli ustawisz limit bajtów (VARCHAR (255)), to narzut na sprawdzenie limitu. Nie ma absolutnie żadnego problemu z używaniem TEKSTU do wszystkiego w PostgreSQL.
przepisany
3
Używanie TEKSTU w PostgreSQL jest właściwie lepszą praktyką, nawet jeśli nie jest przenośne.
cowbert