2012-03-03 9 views
5

Jest ten projekt, nad którym pracuję. To jest jak sieć społecznościowa, w której możemy mieć użytkowników, posty, zdjęcia itp., A potem pojawił się ten problem. Jesteśmy przyzwyczajeni do Mysql i "prawie magicznego" pola auto-inkrementacji, a teraz nie możemy już na to liczyć. Wiem, że obiekt _id w Mongo daje łatwy sposób identyfikacji dokumentu, ponieważ gwarantuje on wyjątkowość. Ale klucz nie jest przyjazny dla użytkownika i to, czego potrzebujemy, więc możemy zrobić adresów URL jak:Generowanie przyjaznych dla użytkownika identyfikatorów w MongoDb

http://website.com/posts/{post_id} 
http://website.com/{user_id} 

I opracowali rozwiązanie, ale nie sądzę, jest to najlepszy sposób to zrobić. Najpierw tworzę tabelę mysql z tylko jedną kolumną. Ta kolumna przechowuje identyfikator użytkownika i jest to pole automatycznego zwiększania wartości. Dla każdego nowego rekordu na mongo wstawiam nowy wiersz w tej tabeli mysql i otrzymuję identyfikator użytkownika z funkcją "LAST_INSERT_ID", teraz mogę wstawić moje dane do mojej kolekcji mongo z numerycznym ID. Inną korzyścią jest to, że mogę wymazać mój tabelę mysql powiedzmy po milionie wierszy, ponieważ id są już zapisane w mongo. Czy robię to źle?

+3

Można oczekiwać użytkownicy zapamiętać liczbę całkowitą? Jedyną osobą, którą znam, jest to, że Randall ma sławę xkcd, a ma tylko nieco ponad 1000. Po prostu użyj identyfikatorów mongo - użytkownicy i tak ich nie zapamiętują. –

+1

"przyjazny dla użytkownika" oznacza treści czytelne dla człowieka i zrozumiałe. Nie potrzebuję użytkowników do zapamiętania, ale potrzebuję go z innych powodów. –

Odpowiedz

7

Po pierwsze, nie widzę żadnej korzyści z używania arbitralnego numeru zwiększającego auto nad wygenerowanym id mongo. Nie tylko nie jest to po prostu arbitralny identyfikator, ale musisz zachować kolejność.

To powiedziawszy, czemu nie pozwolić mongo zarządzać identyfikatorem i użyć innego unikalnego identyfikatora dla adresów URL. Jeśli Twoi użytkownicy mają "nazwę użytkownika", zakładam, że udało ci się upewnić, że jest to unikalne w całej kolekcji. Po prostu zapytaj o tę unikalną właściwość, zamiast szukać według id.

Umożliwia to również zmianę unikalnego identyfikatora, bez konieczności ponownego przypisywania skojarzeń w bazie danych.

A dla postu po prostu wygeneruj unikatowy pocisk z tytułu.

8

Dlaczego nie używać wtyczek do wpisów i nazw użytkowników? To powinno być czytelne dla człowieka.

+0

Muszę zapytać, co to jest ślimak? – raffian

+2

Definicja z Wikipedii: "Ślimak jest częścią adresu URL, który identyfikuje stronę za pomocą czytelnych dla człowieka słów kluczowych [1] [2], na przykład" Slug_ (publikowanie w Internecie "), a nie nieprzejrzysty identyfikator, taki jak numer identyfikacyjny . zawartość w bazie danych (np „27077911”) Ślimaki są wykorzystywane do konstruowania czyste URL (często permalinks), które są łatwe do wpisania, opisowy, i łatwe do zapamiętania na przykład w tym adresie URL. http: //example.org/2011/introduction-to-blogging the slug to "wprowadzenie do blogowania". " – dicarsio

Powiązane problemy