2010-03-01 13 views
55

Firma, w której pracuję, próbuje zmienić produkt, który używa formatu pliku płaskiego do formatu bazy danych. Obsługujemy dość duże pliki danych (np. 25GB/plik) i są one bardzo szybko aktualizowane. Musimy uruchamiać zapytania, które losowo uzyskują dostęp do danych, a także w sposób ciągły. Próbuję przekonać ich o zaletach korzystania z bazy danych, ale niektórzy z moich kolegów wydają się niechętni. Zastanawiam się więc, czy możecie mi pomóc tutaj z kilku powodów lub linków do postów, dlaczego powinniśmy korzystać z baz danych lub przynajmniej wyjaśnić, dlaczego płaskie pliki są lepsze (jeśli takowe są).bazy danych a pliki płaskie

+7

Należy wspomnieć o strukturze danych, o której tutaj mowa. Jeśli każdy z tych 25-gigabajtowych plików przekłada się na 25 wierszy po 1 GB, prawdopodobnie lepiej będzie, gdy pliki będą płaskie. –

+0

Jestem bardziej ciekawy, dlaczego twoi koledzy nie chcą używać relacyjnej bazy danych jako bazy danych? Geezus – Jeff

+0

wszystko zależy od różnych zmiennych. Nie można powiedzieć, że jedno jest lepsze od drugiego. –

Odpowiedz

73
  1. Bazy danych mogą obsługiwać zapytań zadań, więc nie trzeba chodzić nad pliki ręcznie. Bazy danych mogą obsługiwać bardzo skomplikowane zapytania.
  2. Bazy danych mogą obsługiwać zadania indeksowania więc jeśli zadania, takie jak dostać płytę z id = x może być bardzo szybko
  3. Bazy danych mogą obsługiwać wieloprocesowej/wielowątkowe dostępu.
  4. Bazy danych może obsługiwać dostęp z sieci
  5. Bazy danych można oglądać do danych integralności
  6. Bazy danych można aktualizować dane łatwo (patrz 1))
  7. Bazy danych są wiarygodne
  8. Bazy danych mogą obsługiwać transakcje i współbieżnych dostęp
  9. Bazy danych + ORM pozwalają manipulować danymi w przyjazny dla programisty sposób.
2

Możliwości zapytania SQL ad hoc są dla mnie wystarczającym powodem. Przy dobrym schemacie i indeksowaniu tabel jest to szybkie i skuteczne i będzie miało dobrą wydajność.

4

Nie buduj, jeśli możesz go kupić.

Słyszałem ostatnio ten cytat i naprawdę wydaje mi się odpowiedni jako przewodnik. Zadaj sobie to pytanie ... Ile czasu zajęło Ci zajmowanie się częścią aplikacji związaną z przetwarzaniem plików? Podejrzewam, że poświęcono sporo czasu na optymalizację tego kodu pod kątem wydajności. Jeśli korzystałeś z relacyjnej bazy danych przez cały czas, spędziłbyś znacznie mniej czasu zajmując się tą częścią aplikacji. Miałbyś więcej czasu na prawdziwy "biznesowy" aspekt swojej aplikacji.

+0

Właściwie cała aplikacja to tylko kilka dziwnych skryptów basha ... cały system to jeden człowiek, który pokazuje ruchome pliki. Smutno, wiem ... – hyperboreean

+2

Fajnie, ale ostatnio sprawdziłem, że najlepsze bazy danych są darmowe. – rook

+4

Niestety, przeciwieństwo jest równie prawdziwe. Lepsze powiedzenie brzmi "Kup dobre rozwiązania, które są dopasowane do twoich potrzeb, jeśli istnieją, w przeciwnym razie je zbuduj" –

5

Databases do końca.

Jednakże, jeśli nadal istnieje potrzeba przechowywania plików, nie można wykorzystać nowego RDBMS (takiego jak Oracle, SQLServer itp.), Niż spojrzeć na XML.

XML to format pliku struktury, który oferuje możliwość przechowywania rzeczy jako plik, ale daje moc zapytania do pliku i danych w nim. Pliki XML są łatwiejsze do odczytania niż pliki płaskie i można je łatwo przekształcić za pomocą XSLT, aby uzyskać jeszcze lepszą czytelność dla człowieka. XML to także świetny sposób na przenoszenie danych, jeśli musisz.

Zdecydowanie polecam DB, ale jeśli nie możesz pójść tą drogą, XML jest ok sekundą.

+3

Ale Oracle i SQL Server kosztują, po co płacić za coś, gdy jest lepiej za darmo? MySQL do końca. – rook

+3

Jeśli mają plik CSV 25 gb, może to z łatwością podwoić rozmiar (jeśli nie więcej) za pomocą znaczników XML dla wierszy i kolumn. Powiedzenie, że znaczące wzdęcie jest brane pod uwagę przy przechodzeniu z plików płaskich do XML. –

+4

@Scott Root: Osobiście nie lubię XML, ponieważ postrzegam go jako ciężką metodę przekazywania danych. – hyperboreean

3

Co z nierelatywną bazą danych (np. Amazon SimpleDB, Tokio Cabinet itp.)? Słyszałem, że Google, Facebook, LinkedIn używają ich do przechowywania ogromnych zbiorów danych.

Czy możesz nam powiedzieć, czy twoje dane są uporządkowane, czy twój schemat jest poprawiony, czy potrzebujesz łatwej replikacji, czy czasy dostępu są ważne, itd.?

+0

Zajmujemy się tym również ... najpierw musimy upewnić się, że wszyscy jesteśmy na tej samej stronie. Chociaż, jeśli potrzebujesz uruchomić złożone raporty, nie jestem pewien, jak radzi sobie z nim nosql. – hyperboreean

3

Jakie typy plików nie są wymienione. Jeśli są to pliki multimedialne, należy postępować z plikami płaskimi. prawdopodobnie potrzebujesz tylko DB dla znaczników i jakiś sposób na powiązanie "zewnętrznych BLOBów" z rekordami w DB. ale jeśli wyszukiwanie pełnotekstowe jest czymś, czego potrzebujesz, nie ma innego wyjścia, ale migruj do pełnej bazy danych.

Inną rzeczą, twój system plików może zapewnić pułap w zakresie liczby fizycznych plików.

4

Są szybsze; chyba że ładujesz cały płaski plik do pamięci, baza danych umożliwi szybszy dostęp w prawie wszystkich przypadkach.

Są bezpieczniejsze; bazy danych są łatwiejsze do bezpiecznego tworzenia kopii zapasowych; mają mechanizmy sprawdzające, czy nie ma korupcji plików, które nie są plikami płaskimi. Gdy korupcja w Twoim płaskim pliku zostanie przeniesiona do kopii zapasowych, skończysz, a może nawet nie wiesz o tym jeszcze.

Mają więcej funkcji; bazy danych mogą umożliwiać wielu użytkownikom jednoczesne zapisywanie/zapisywanie.

Są one mniej skomplikowane w obsłudze, gdy zostaną skonfigurowane.

32

To an answer I've already given jakiś czas temu:

To zależy wyłącznie od domen specyficznych potrzeb aplikacyjnych . A wiele razy bezpośredni dostęp do plików tekstowych/binarnych może być niezwykle szybki, wydajny, a także zapewnia wszystkie funkcje dostępu do plików systemu operacyjnego twojego systemu operacyjnego.

Ponadto język programowania najprawdopodobniej ma już wbudowany moduł (lub jest łatwe do wykonania jednego) do konkretnego parsowania.

Jeśli potrzebne jest wiele dołącza (wkładki?) I sekwencyjny/kilka dostęp mały/brak współbieżności, pliki są sposobem iść.

Z drugiej strony, gdy twoje wymagania dla współbieżności, niesekwencyjna czytanie/pisanie, atomowości, uprawnienia atomowe, dane jest relacyjne przez naturę itp będzie lepiej z baza relacyjna lub OO.

Jest wiele rzeczy, które można realizowane z SQLite3, który jest niezwykle lekki (poniżej 300 KB), kwas zgodny, napisany w języku C/C++, a bardzo powszechne (jeśli nie jest już włączone twój język programowania - na przykład Python - z pewnością jest dostępny). Może być użyteczny nawet w przypadku plików db o rozmiarze 140 terabajtów lub 128 tebibytów (Link to Database Size), może być przydatny nawet po .

Jeśli Twoje wymagania będą większe, , to nawet nie będzie dyskusji, przejdź do pełnowymiarowego RDBMS.

Jak już powiedziałeś w komentarzu, że "system" to tylko kilka skryptów, powinieneś spojrzeć na pgbash.

2

Dopóki nie ładujesz plików do pamięci przy każdym uruchomieniu, użyj bazy danych. Proste.

Zakłada to, że twoje uczelnie mają już program do obsługi zapytań do plików. Jeśli nie, użyj bazy danych.

1

Różnica między bazą danych i plików płaskich podane są poniżej:

  • Database zapewnić większą elastyczność podczas płaski plik zapewnić mniejszą elastyczność.

  • System baz danych zapewnia spójność danych, podczas gdy plik płaski nie zapewnia spójności danych.

  • Baza danych jest bezpieczniejsza w przypadku plików płaskich.
  • Obsługa baz danych DML i DDL, natomiast pliki płaskie nie obsługują tych.

  • Mniejsza nadmiarowość danych w bazie danych, a więcej nadmiarowości danych w plikach płaskich.