2011-07-27 8 views
6

Próbuję utworzyć stronę internetową, w której muszę przechowywać kilka przesłanych przez użytkownika plików (np. Niektóre zdjęcia profilowe, niektóre pliki xml itp.).Jaki jest najlepszy sposób przechowywania plików przesłanych przez użytkowników w witrynie internetowej?

Jaki jest najlepszy sposób przechowywania tych plików?

Obecnie tworzę nowy katalog na serwerze dla każdego nowego użytkownika zarejestrowanego i przechowującego pliki dla każdego użytkownika w ich katalogu, ale ktoś powiedział mi, że to nie jest najlepszy sposób.

Jak mogę zapisać te pliki? Czy utworzę wspólny katalog & nazwać pliki według identyfikatora użytkownika lub czegoś związanego z użytkownikiem LUB nadal tworzyć nowy katalog dla każdego użytkownika?

+1

Czy wyjaśniali swoje obawy? Moją obawą byłoby, gdyby inni mieli dostęp do przesłanych informacji b/c znali lokalizację. Jeśli katalog był/protected/user/i dostęp do informacji był możliwy tylko przez PHP, który rozwiązałby moją jedyną obawę. – Wayne

+0

To naprawdę poważny problem, ale teraz użytkownik, który przesłał pliki z moją aplikacją, może być publiczny, więc nie muszę się tym martwić. – ptamzz

Odpowiedz

4

Rzeczywiste rozwiązanie zależy od Twoich wymagań, np. ilu użytkowników się spodziewasz. Rozwiązanie z jednym katalogiem na użytkownika może wkrótce spowodować pewne ograniczenia systemu plików (dla ext3 maksymalna liczba podkatalogów w jednym katalogu jest ustalona na 32000).

Jeden plik na użytkownika powinien być w porządku przez długi czas (patrz: How many files in a directory is too many?).

Wreszcie, jeśli twoja baza użytkowników powiększa się, możesz użyć stałej liczby shardów (np. Na podstawie identyfikatora użytkownika), aby ograniczyć zarówno liczbę katalogów, jak i liczbę plików na katalog (jako przykład dla tego, patrz how git stores its objects in loose format).

+0

Dzięki. To odpowiada na wiele rzeczy, które miałem w głowie !! – ptamzz

1

Masz kilka opcji.

  1. Możesz przechowywać je jako pliki w systemie plików, poza katalogiem głównym.
  2. Możesz przechowywać je jako dane binarne w standardowym RMDBS takim jak MySQL.
  3. Można używać bazy danych "NoSQL", takich jak CouchDB lub Redis, które specjalizują się w przechowywaniu dokumentów.

Najlepszy sposób zależy od zastosowania, ram czasowych i doświadczenia. Opcja 1 byłaby prawdopodobnie najłatwiejsza. Opcja 2 byłaby prawdopodobnie najbardziej elastyczna. Opcja 3 najprawdopodobniej byłaby najskuteczniejsza, gdyby spełniała potrzeby dokumentów.

+2

Nie jestem pewien, czy Redis specjalizuje się w przechowywaniu dokumentów - Redis jest przede wszystkim kluczowym: wartościowym sklepem. Kiedy termin "dokument" jest używany w dyskusjach na temat baz danych NoSQL, ludzie zazwyczaj mają na myśli obiekt danych, a nie coś takiego jak plik XML. Z drugiej strony, nigdy nie słyszałem o przechowywaniu danych binarnych pliku w bazie danych, więc przypuszczam, że jest to możliwe. – Matt

+0

Oto moje źródło do przechowywania dokumentów Redis. http://images.infoworld.com/d/data-explosion/no-sql-new-databases-new-applications-400?page=0,3 Przyznaję, że nigdy nie użyłem żadnego z nich. Mam zapisane pliki w bazie danych. w PHP używasz pola BLOB i używasz pack() do konwersji binarnego łańcucha. Użyłem również metody podobnej do GIT, w której użyłem identyfikatora użytkownika, podałem go do 0000003450, a następnie utworzyłem katalog:/00/00/00/34/50/ –

Powiązane problemy