2010-02-18 13 views
5

Mam aplikację WCF, która obecnie używa przechowywania plików na bazie XML do przechowywania danych, które przyzwyczaja się do generowania raportów. Poza tym decyzje dotyczące przetwarzania są podejmowane na podstawie informacji przechowywanych w tych plikach XML.Wszelkie uwagi przed skokiem do SQLite?

Uderzam teraz w objętości około 30 000 plików tekstowych. Jest to niewiarygodnie podatkowe, a aplikacja czasami się zatrzymuje.

Zawsze chciałem zamienić XML DAL na korzyść RDBMS, ale menedżerowie projektów po prostu na to nie pozwalają. Ale byliby skłonni spojrzeć na rozwiązanie bezserwerowe, na przykład SQLLite. Naprawdę mam ochotę po prostu zanurkować i zacząć używać go jako zamiennik DAL (warstwa dostępu do danych).

Potrzebowałbym nie więcej niż około 20 tabel w całym rozwiązaniu, a spodziewałbym się, że nie będzie więcej niż około 20 000 - 100 000 transakcji dziennie, jednak jest to ekstremalne, rzeczywiste wolumeny byłyby mniejsze niż to w większości przypadków.

Aktualizacja

ja nie spodziewałem się wiele jednoczesnych połączeń, kiedy mówię transakcji, to w istocie oznaczać 1 lub 2 klientów, które sprawiają, połączeń i realizują przeciwko bazy danych w porządku. Czasami istnieje możliwość, że klienci zewnętrzni będą wykonywać szybkie połączenia z bazą danych. Ale większość połączeń DB będzie wykonywana przez moją usługę WCF, która jest zaplanowanym zadaniem wstecznym, nie obsługującym 100-stu osób w organizacji.

Kolejną zaletą jest to, że muszę przechowywać dane tylko przez 90 dni, więc baza danych nie powinna rosnąć zbyt duża.

Moje główne problemy to:

Jak wiarygodny jest SQLLite? Co się stanie, jeśli plik DB zostanie uszkodzony, stracę wszystkie dane przetwarzania. Jak łatwo jest utworzyć kopię zapasową DB? Czy obsłuży moje tomy? I na koniec, jak dobrze działa dostawca .net (tutaj: http://sourceforge.net/projects/sqlite-dotnet2/).

Jeśli masz jakieś doświadczenie z SQLLite, opublikuj swoje doświadczenia, aby móc podjąć świadomą decyzję o zmianie.

góry dzięki ...

Odpowiedz

1

Biorąc swój wolumen transakcji Powiedziałbym fakt, że sama DB to pojedynczy plik monolityczne tylko system plików dostępny blokujący może być problem.

Zablokowanie oparte na wierszach nie istnieje, o ile wiem.

+0

Pozwólcie, że zmienię moje pytanie. –

+0

Dobrze, sqlite nie obsługuje wielu użytkowników próbujących uzyskać do niego dostęp jednocześnie, ale dopóki jest to monolityczny magazyn danych używany przez jedną aplikację na raz, działa świetnie. – Karl

+0

@Karl obsługuje równoczesny dostęp do różnych procesów, nawet z różnych systemów, i obsługuje transakcje, co jest najlepszym sposobem na zarządzanie blokowaniem. Jest zgodny z ACID. Ponieważ jednak cała baza danych jest zawarta w jednym pliku i blokuje się na poziomie pliku, czytniki blokują oczekujące zapisy i zapisują blok do momentu zakończenia odczytu. –

3

Można rozważyć Microsoft Sql Compact Edition.
To jest jak sqlite, jeśli chodzi o bycie pojedynczą, wbudowaną bazą danych, ale ma lepszą integrację z platformą .net :)
SQLite wydaje się być niezawodny, i nawet z Microsoftem, nie oczekuj zbyt dużego wsparcia w przypadku uszkodzona baza danych.

+0

Sqlite działa świetnie, ale na pewno miałem problemy z odtwarzaniem go z interfejsem obiektów aktywnych danych wizualnych w studio graficznym, więc jeśli masz zamiar być w ziemi Windows, być może MS Sql Compact jest lepszym wyborem. – Karl

5

SQLite jest tak samo niezawodny jak Twój system operacyjny i sprzęt.

Jego stawka transakcyjna jest podobna do SQL Server i często szybsza, ponieważ wszystko jest w toku.

Dostawca .NET ADO działa świetnie.

Aby utworzyć kopię zapasową bazy danych, zatrzymaj usługę i skopiuj plik. Jeśli plik dziennika jest obecny, skopiuj go również.

EDYCJA: SQLite domyślnie używa UTF-8, więc z dostawcą ADO-NET powinieneś być w stanie uniknąć utraty akcentów (pod warunkiem, że postępujesz zgodnie z typowymi regułami w łańcuchach XML).

+0

Bezpieczne jest również tworzenie kopii zapasowej bazy danych, gdy masz wyłączną transakcję bez zatrzymywania usługi - Twoja wyjątkowa transakcja gwarantuje, że nic innego nie dotyka bazy danych. Również wersja 3.6.11 dodała API do backupu na żywo bezpośrednio w rdzeniu silnika (nie wiem, czy opakowanie .NET ujawnia to jeszcze, ale jeśli nie, to byłoby łatwo dodać). –

1

Użyłem SQLite z dostawcą .Net bez problemów w środowisku monouser, z wyjątkiem jednego problemu: akcenty, które nie pokazały się poprawnie. Kopia zapasowa jest po prostu prosta: baza danych SQLite jest zwykłym plikiem tekstowym. Po prostu go skopiuj.

+0

Co to są akcenty? Nigdy nie słyszałem o nich. –

+0

"acentos" w języku hiszpańskim, myślę: coś takiego – Apocatastasis

+0

OK, wtedy będę miał problem, ponieważ rozwiązanie, którego używam, jest dla czeskich klientów, którzy nie używają angielskiego zestawu znaków. –

1

Używam Sqlite do przechowywania danych konfiguracyjnych XML i nie miałem z tym problemu. Korzystam z dostawcy System.Data.Sqlite: http://sqlite.phxsoftware.com/. Jest solidny i ma dobre forum pomocy. Zawiera również dostawcę LINQ. Integruje się również z VS 2008, dzięki czemu można korzystać z Server Explorer do obsługi zapytań o tabele. Przykłady i dokumentacja pokazują również, jak używać sparametryzowanych komend i transakcji w celu zwiększenia wydajności.

Kandydat do wydania dla LinqPada obsługuje teraz Sqlite: http://www.linqpad.net/Beta.aspx.

Sqlite przechowuje wszystko w jednym pliku, który można zarchiwizować jak każdy inny plik binarny.

Sqlite obsługuje tylko blokowanie na poziomie plików, ale nie powinno przedstawiać problemu z wydajnością, ponieważ nie brzmi tak, jakbyś miał dużą liczbę równoczesnych transakcji.

Kod Unicode nie powinien stanowić problemu. Ten odsyłacz na forum odnosi się do obszaru, w którym ktoś próbował odczytać znaki Unicode za pomocą niezgodnego narzędzia http://sqlite.phxsoftware.com/forums/t/954.aspx.

Ta strona pokazuje, jak wykonywać porównania nienaformalizowanych plików UTF8 przy użyciu System.Data.Sqlite za pomocą niestandardowego programu gromadzącego dane, z rosyjskimi znakami jako przykładem: http://www.codeproject.com/KB/database/SQLiteUTF8CIComparison.aspx.

Powiązane problemy