2010-04-02 8 views
6

Aby zapobiec czyszczeniu bazy danych SQLite w pamięci, należy użyć tego samego połączenia, aby uzyskać dostęp do bazy danych. Jednak użycie tego samego połączenia powoduje, że SQLite synchronizuje dostęp do bazy danych. Tak więc, jeśli mam wiele wątków wykonujących odczyty na bazie danych w pamięci, jest ona wolniejsza na maszynie wielordzeniowej niż ten sam kod działający na bazie danych z zabezpieczonymi plikami.Czy bazy danych SQLite w pamięci mogą być skalowane przy użyciu współbieżności?

Czy jest jakiś sposób, aby uzyskać najlepsze z obu światów? Oznacza to, że baza danych w pamięci umożliwia wielokrotne, jednoczesne wywoływanie bazy danych?

Odpowiedz

3

Odpowiedź brzmi: nie. Zapytałem o grupę użytkowników SQLite i otrzymałem następującą odpowiedź od Pavela Iwanowa:

Nie, SQLite nie obsługuje pełnego równoczesnego dostępu do dowolnej bazy danych. Jedyną współbieżnością, jaką można zdobyć, jest posiadanie bazy danych na dysku bez udostępnionej pamięci podręcznej (tak więc posiadanie kilku kopii bazy danych w pamięci ). Oczywiście nie rozważam opcji współbieżności od różnych procesów.

0

stąd zrozumiałem, że odpowiedź jest twierdząca http://www.sqlite.org/faq.html#q6

+0

To po prostu oznacza, że ​​jest bezpieczny w użyciu od wielu wątków. Mogę o tym poświadczyć. Ale nie skaluje się - wykorzystuje tylko jeden rdzeń mojego dwurdzeniowego jądra. Tak więc bezpieczeństwo odbywa się kosztem wydajności. Aktualizacja mojego tytułu w celu wyjaśnienia. –

+0

"wykorzystuje tylko jeden rdzeń" - oznacza to, że twoje wątki zostały wysłane w ten sposób! Może to być spowodowane przez wewnętrzne blokowanie lub inną synchronizację w sqlite. Jeśli naprawdę chcesz DB + współbieżność, powinieneś rozważyć jakiś niestandardowy kod z końcowym spłukaniem do współdzielonego DB. Myślę, że chcesz od sqlite za dużo. – Andrey

+1

chodzi o to, że działa z bazą danych SQLite opartą na plikach (100% zużycia procesora), ale nie z bazą danych w pamięci. Jeśli SQLite nie obsługuje tego scenariusza, jest to w porządku, ale potrzebuję cytatu. –

2

Jeśli ustawiony rozmiar strony i rozmiar pamięci podręcznej na tyle duża, aby pomieścić całą bazę danych, operacje odczytu będą realizowane z pamięci podręcznej, a wydajność będzie prawie równa baza danych w pamięci.

+0

+1 Ciekawy pomysł - będę o tym pamiętać. –