C # Minimalna baza danych SQL

12

Pracuję nad małym projektem (nie produkcyjnym), w którym muszę przechowywać wystarczającą ilość danych, aby coś takiego jak CSV było nieefektywne w przetwarzaniu, a serwer SQL / MySQL byłby zbyt duży. Czy .Net ma jakiś sposób na efektywne przechowywanie kilku wpisów danych z możliwością zapytania bez konieczności zarządzania i łączenia się z serwerem, zamiast ładowania i przetwarzania pojedynczego pliku.

David
źródło
Jeśli masz już uruchomiony serwer bazy danych, tworzenie innej bazy danych jest dość trywialne. Jeśli używasz tylko danych, możesz rozważyć dostęp.
Brad
@Brad to tylko osobisty projekt i obecnie nie prowadzę żadnych serwerów baz danych w moim domu. Twoja sugestia dotycząca dostępu może być dokładnie tym, czego szukam.
David
4
Nie jestem fanem Access , ale czasem przyznam, że to właściwe rozwiązanie. Czy zastanawiałeś się nad serializacją obiektów ? Po prostu stwórz obiekt i zapisz go do pliku. (Obiekt może być a List<foo>)
Dan Pichelman
Czy chcesz je zachować, czy tylko muszą być w pamięci?
Richard
1
@David: 4000 wpisów - tak mało? Dlaczego nie zatrzymać ich wszystkich w pamięci? Jeśli potrzebujesz tylko bazy danych w pamięci, aby wykonać zapytania, bez żadnych narzędzi administracyjnych, zestaw danych z pewną bazą danych (utrwaloną w pliku) może być wystarczający do twoich potrzeb.
Doc Brown

Odpowiedzi:

15

Istnieje kilka alternatyw, w żadnej kolejności:

  1. Wszystkie wersje (płatne?) Studio graficzne są dostarczane z zainstalowanym programem SQL Server Express . Możesz tego użyć.
  2. Pliki (Ugh) XML
  3. SQL Server CE (w zasadzie lokalny SQL przez plik)
  4. SQLite

Więcej pomysłów tutaj: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c

Sklivvz
źródło
Naprawdę chcę czegoś, co jest całkowicie samowystarczalne w jednym pliku wykonywalnym, bez bibliotek DLL i żadnego oprogramowania innych firm. Czy którekolwiek z powyższych, oprócz XML, jest w stanie zaspokoić te potrzeby?
David
Możesz osadzić biblioteki DLL w swoim pliku wykonywalnym.
Sklivvz
Wydaje mi się, że najważniejszą częścią nie są żadne usługi stron trzecich *, takie jak MSSQL / MySQL # 3 lub # 4, które pasują do tego
David
Nie pamiętam, czy SQL CE ma osobne środowisko uruchomieniowe, czy nie. SQLite nie, ale konfiguracja z projektem .NET może być nieco trudna.
GalacticCowboy
3
Dodałbym, że LocalDB jest opcją. Zobacz tę odpowiedź: stackoverflow.com/questions/9655362/…
Andy
4

Oprócz oferowanych opcji Sklivvz nie obawiaj się wyjść poza dziedzinę SQL i użyć wbudowanego zorientowanego obiektowo silnika bazy danych, takiego jak Sterling lub DB4O .

Oferują zalety polegające na tym, że są małe i oparte na plikach, można je osadzać w aplikacji, ale są również bardzo szybkie i łatwe do zaprogramowania.

Eric King
źródło
3

SQLite będzie najlepszą opcją.
Jak napisano na ich stronie:

SQLite to biblioteka oprogramowania, która implementuje niezależny, bezserwerowy, transakcyjny silnik bazy danych SQL.

Wydaje się, że naprawdę tego szukasz!

Jest nawet pakiet Chocolatey, jeśli jesteś zbyt leniwy, aby go pobrać i zainstalować samodzielnie!

MaxSC
źródło
2

ADO.NET może serializować do formatu XML i ma prawie wszystkie funkcje RDBMS. (W każdym razie te tanie.)

Wiem, że jest „stary” i wygląda na pogardliwie, ale ADO.NET działa naprawdę dobrze w przypadku dokładnie tego, co opisujesz. Wykonuje nawet całkiem niezłą robotę, śledząc niezaangażowane zmiany.

Może być „Stary”, ale z pewnością nie jest „Rozerwany”. Ma jednak dość duży wpływ na pamięć, więc zadzwoń. 4000 rekordów nie będzie problemem.

Wesley Long
źródło
czy mógłbyś rozwinąć temat „dużego obciążenia pamięci”?
David
@David - oznacza, że ​​cały zestaw danych będzie przechowywany w pamięci, a nie tylko rekordy, które zwrócisz z zapytania. Jeśli posiadasz bazę danych z 4 milionami rekordów, trzymanie ich w zbiorze danych ADO.NET byłoby poważnym wykorzystaniem zasobów, podczas gdy „prawdziwy” RDBMS trzymałby ją na dysku, dopóki nie zapytasz o ich podzbiór. 4000 rekordów to niewielkie kichnięcie w użyciu pamięci, więc nie martwiłbym się tym.
Wesley Long,
+1, myślę, że jest to najlepsza opcja, dla tych wymagań nawet coś małego, ponieważ SQLlite wydaje się być dużym wysiłkiem.
Doc Brown