Tworzyłem program w języku Python do mierzenia rozwoju codereview.SE . Moje podejście polegało na uzyskaniu „statystyk witryny” wyświetlanych na pierwszej stronie i zapisaniu ich na moim dysku twardym. Planuję to robić raz dziennie. Do tej pory zrobiłem wystarczająco dużo, aby uzyskać statystyki i dołączyć je do pliku tekstowego. Skrypt Pythona można wyświetlić na github . Format, którego używam, jest następujący
22-08-2013
questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407
22-08-2013
questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407
Właśnie uruchomiłem skrypt dwa razy, aby uzyskać format, którego chciałbym użyć w pliku. Początkowo wydawało mi się to dobre, ponieważ sam będę go przechowywać, a format byłby taki sam, więc można by go łatwo przeanalizować, ale nie jestem pewien. Wydaje się, że korzystanie z bazy danych powinno być tutaj lepsze, ponieważ w ten sposób odzyskiwanie danych powinno być łatwiejsze. Uwaga: nigdy nie korzystałem z żadnej bazy danych i nie mam wiedzy o SQL, MySQL ani innych wariantach RDBMS.
To prowadzi mnie do pytania. Kiedy należy preferować bazę danych do przechowywania danych niż do przechowywania danych w pliku tekstowym? Czy są jakieś wskazówki, których mogę szukać przy podejmowaniu decyzji, czy potrzebuję bazy danych czy prostych plików tekstowych?
PS: Jeśli można dodać lepsze tagi, zrób to. Miałem wątpliwości co do tagów, które można dodać.
Odpowiedzi:
Wikipedia mówi nam, że baza danych to zorganizowany zbiór danych . W ten sposób plik tekstowy jest bazą danych. Mówi dalej:
Ta część jest subiektywna - nie mówi nam konkretnie, w jaki sposób należy modelować dane ani jakie operacje należy zoptymalizować. Twój plik tekstowy składa się z wielu odrębnych zapisów, po jednym na każdy dzień, więc modelujesz aspekt rzeczywistości w sposób odpowiedni dla twojego problemu.
Zdaję sobie sprawę, że kiedy mówisz „baza danych”, prawdopodobnie myślisz o jakimś systemie zarządzania relacyjnymi bazami danych, ale myślenie o pliku tekstowym jako bazie danych zmienia twoje pytanie z „kiedy powinienem użyć bazy danych?”. na „jakiego rodzaju bazy danych powinienem użyć?” Widzenie rzeczy w tym świetle ułatwia odpowiedź: użyj lepszej bazy danych, gdy ta, którą masz, nie spełnia już twoich wymagań.
Jeśli Twój skrypt w Pythonie i prosty plik tekstowy działają wystarczająco dobrze, nie musisz tego zmieniać. Mając tylko jeden nowy rekord dziennie, a komputery stają się coraz szybsze każdego roku, podejrzewam, że twoje obecne rozwiązanie może być opłacalne przez długi czas. Dane z dekady dałyby tylko 3650 rekordów, które po przeanalizowaniu prawdopodobnie wymagałyby mniej niż 75 kilobajtów.
Wyobraź sobie, że zamiast jednego małego rekordu dziennie postanowiłeś zapisać każde pytanie zadane na CodeReview, kto go zadał i kiedy. Ponadto zbierasz wszystkie odpowiedzi i odpowiednie metadane. Możesz to wszystko zapisać w pliku tekstowym, ale płaski plik utrudniłby znalezienie informacji, kiedy byłyby potrzebne. Będzie zbyt wiele danych, aby wczytać całą pamięć do pamięci, więc za każdym razem, gdy chcesz znaleźć pytanie lub odpowiedź, będziesz musiał skanować plik, aż znajdziesz to, czego szukasz. Gdy chcesz znaleźć wszystkie pytania zadane przez danego użytkownika, musisz zeskanować cały plik. Jeśli chcesz znaleźć wszystkie pytania, które zawierają „błędy” jako tag, musisz zeskanować plik.
To byłoby strasznie wolne, więc możesz zdecydować się przyspieszyć, budując indeksy, które podpowiedzą, gdzie szukać w pliku, aby znaleźć dany rekord. Możesz mieć indeks pytań, inny dla użytkowników, trzeci dla odpowiedzi i tak dalej. Gdy chcesz znaleźć pytanie, przeszukujesz (znacznie mniejszy) indeks pytań, uzyskujesz pozycję pytania w głównym pliku danych i szybko przeskakujesz we właściwe miejsce w pliku. To byłaby duża poprawa wydajności. Rzeczywiście, taki właśnie jest system zarządzania bazą danych.
Więc używaj DBMS, kiedy jest to, czego potrzebujesz. Używaj go, gdy masz dużo danych, gdy chcesz mieć szybki dostęp do tych danych i być może w sposób, którego na początku nie potrafisz całkowicie przewidzieć. Jeśli masz różne rodzaje danych - różne typy rekordów - które są ze sobą połączone, użyj RDBMS, aby móc odpowiednio powiązać różne rekordy.
źródło
Bazy danych mają wiele zalet, ale czyni dostęp łatwiej nie jest jednym z nich. Szybsze, bardziej znormalizowane, interpretowalne jako podrzędny język poleceń, bezpieczniejsze, tak - ale nie łatwiejsze. Bez względu na to, ile cukru syntaktycznego zapewnia Twój język i standardowa biblioteka, musisz przede wszystkim mieć bazę danych, otworzyć połączenie z nią i przekierować dane z programu na coś zupełnie innego. Tak długo, jak nie ma problemów z tym, co robisz, a łatwość programowania jest twoim priorytetem, nigdy nie przełączaj się na bazę danych tylko dlatego, że uważasz, że to „dobra praktyka”.
Moim zdaniem, kiedy dokonać zmiany, jest śledzenie rozwoju historycznego. W końcu ludzie przechowywali dane w plikach przez długi czas, zanim wynaleziono relacyjną bazę danych, a tak naprawdę wcześniej wymyślono całą masę gorszych modeli baz danych (hierarchiczna baza danych, baza danych sieci ...). Zaczęli pisać bazy danych i korzystali z nich, gdy stało się jasne, że pozwoli to zaoszczędzić sporo czasu na przetwarzaniu, zwiększyć ogólną niezawodność itp. Na dłuższą metę . Dopóki nie będzie tak w twoim przypadku, i nie przewidujesz, że stanie się to w najbliższym czasie, zmiana będzie nadmiernie inżynierska.
źródło
Będzie to oczywiście wezwanie do oceny, ale trzy główne kryteria, które rozważę, to: czy musi być zgodny z ACID , jak skomplikowane są dane i wreszcie, ile rzeczy trzeba odczytać / napisać. Tak długo, jak po prostu czytasz i piszesz jeden wiersz na, a Twoja aplikacja jest jedyną aplikacją, która czyta lub pisze, prawdopodobnie możesz pominąć bazę danych. Gdy zaczniesz mieć wiele aplikacji do odczytu lub zapisu, lub gdy struktura danych stanie się złożona (szczególnie jeśli ma związek między oddzielnymi liniami), baza danych zaczyna wyglądać naprawdę atrakcyjnie.
źródło
Bazy danych służą nie tylko do przechowywania, ale także do manipulowania danymi i ich wysyłania zapytań, dlatego musisz podjąć świadomą decyzję:
Dużym czynnikiem jest korzyść, jaką uzyskuje się z instalacji bazy danych na komputerze, w porównaniu z funkcjami, które oferuje
Oczywiście, jeśli potrzebujesz zapytać o dane i manipulować nimi, a chcesz, aby dostęp był szybki - a dodatkowo możesz zastanawiać się nad wykorzystaniem bazy danych do innych funkcji, może to być dobry pomysł. Modele przechowywania baz danych umożliwiają bardzo szybkie wyszukiwanie danych według kluczowych wartości i mogę sobie wyobrazić, że parsowanie pliku może być powolne (w zależności od tego, jak to robisz)
Jeśli chcesz grać z SQL i co potrafi, SQLFiddle.com ma kilka różnych modeli RDBMS, którymi możesz się bawić (uruchamianie zapytań, tworzenie schematu itp.)
źródło
sqlite3
. Dlatego instalacja bazy danych nie stanowi problemu. Uważam, że jeśli będę nadal przechowywać dane, chyba że będę mieć jakieś indeksowanie, może stać się wolne. Myślę, że baza danych może się tym zająć. Ściągnąłem sqlite3 osobno, aby się tego nauczyć, stwierdziłem, że muszę dowiedzieć się o modelach baz danych przed użyciem bazy danych, spróbowałem tego. Mogę nauczyć się sqlite3 na przykładach internetowych, ale obecnie mam problemy z uczeniem się modeli baz danych. Wtedy przyszło mi do głowy, czy to było warte kłopotów?Jak zawsze korzystanie z bazy danych lub nie, zależy od tego, co musisz zrobić. Jeśli masz ogromną ilość danych i musisz wykonać na niej wiele różnych zapytań, prawdopodobnie baza danych może ci pomóc.
W twoim przypadku przechowałbym pamięć w pliku testowym, dopóki wydajność nie będzie akceptowalna. Zwykle czytanie pliku tekstowego (nawet dużego) nie trwa tak długo. Jeśli potrzebujesz więcej, zawsze możesz dodać bazę danych później.
Z mojego doświadczenia wynika, że jeśli jesteś zupełnie nowy w bazach danych, łatwiejsze może być użycie czegoś takiego jak couchdb: http://couchdb.apache.org/, który nie jest sql i możesz używać bezpośrednio javascript lub python itp. Do zapytań.
źródło