Article View: pl.comp.lang.delphi.bazy-danych
Article #82244Re: zmiana klucza z int na string
From: Arivald
Date: Wed, 30 Jul 2014 22:59
Date: Wed, 30 Jul 2014 22:59
50 lines
3398 bytes
3398 bytes
On 2014-07-30 20:25, Ciekawy wrote: > >> A co do takiego pola geometrii, lub wręcz całych rekordów bez PKEYa, to >> o ile dane się nie duplikują to jako PKEY możesz użyć skrótu SHA-1 z >> całego wiersza (160 bitów, więcej niż GUID) >> > Przemyślałem sprawę, muszę zrobić sobie listę buforującą klucze. Sprawę > załatwia mi TList<string> Index to dla mnie klucz Integer. Daj spokój TList. To się nie nadaje na cache bazy danych, już przy kilku tysiącach rekordów TDictionary będzie ogólnie szybsze, biorąc pod uwagę szukanie, sortowanie i realokacje pamięci, drogie dla TList. Dla milionów rekordów TList nie ma żadnych szans. > Jedyny temat > to to, że TList jest wolniejsza od TDictionary przy sprawdzaniu czy dany > element nie znajduje się na liście, a musi sprawdzić zanim go doda: > TDictionary<>.containKey > TList<>.IndexOf <>-1. (dla 30 000 rekordów dla TDictionary to 1 sek dla > TList 7 sek). > Z kolei w TList wygodnym jest to że mogę dobrać się do elementu za > pomocą jego indexu. TDictionary takiej opcji nie posiada. Za to posiada dostęp po kluczu, o w miarę stałej prędkości. Także stały czas dodawania/usuwania rekordu. W TList problemem dostępy po kluczu jest nie tylko czas indexof(), ale też jego charakterystyka, ponieważ generalnie najczęściej czyta się czy modyfikuje ostatnio dodane rekordy. > > Co do stosowania klucza typu Integer, zostawiam to u siebie, powyższe > rozwiazanie chcę stosować tam gdzie takiego klucza nie ma. > > Pozdrawiam Ciekawy. > > Może jest coś co łączy w moim przypadku atuty i TDictionary<> i TList<>? Ja bym zrobił zupełnie inaczej. Robisz sobie embedded SQLite (lub firebird), i składujesz tam dane, i korzystasz z potęgi SQLa + TDataSet. Oczywiście będzie to nieporównywalnie wolniejsze niż iteracja po TDictionary czy TList... Ale SQL załatwia Ci od ręki filtrowanie, sortowanie i łączenie danych, na pewno szybciej niż byś to wydziergał na TList. SQLite umożliwia tworzenie tabel "tylko w pamięci", więc jak masz gigabajty ramu do dyspozycji to operacje na dysku nie będą Cię spowalniać. -- Arivald
Technical Details
Message-ID:
<lrbtbg$su1$1@news.dialog.net.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!news.man.lodz.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mailReferences:
<lr8ptb$lcj$1@node2.news.atman.pl> <53d8235b$0$2154$65785112@news.neostrada.pl> <lra9bd$1qg$1@node2.news.atman.pl> <lraebq$6oo$1@news.dialog.net.pl> <lrb1c6$q55$1@node2.news.atman.pl> <lrb4aa$h0d$1@news.dialog.net.pl> <lrbdb8$p18$1@node1.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!news.man.lodz.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: Arivald <NOSPAMarivald@interia.pl> Newsgroups: pl.comp.lang.delphi.bazy-danych Subject: Re: zmiana klucza z int na string Date: Thu, 31 Jul 2014 00:59:00 +0200 Organization: Dialog Net Lines: 51 Message-ID: <lrbtbg$su1$1@news.dialog.net.pl> References: <lr8ptb$lcj$1@node2.news.atman.pl> <53d8235b$0$2154$65785112@news.neostrada.pl> <lra9bd$1qg$1@node2.news.atman.pl> <lraebq$6oo$1@news.dialog.net.pl> <lrb1c6$q55$1@node2.news.atman.pl> <lrb4aa$h0d$1@news.dialog.net.pl> <lrbdb8$p18$1@node1.news.atman.pl> NNTP-Posting-Host: dynamic-78-8-3-25.ssp.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1406761136 29633 78.8.3.25 (30 Jul 2014 22:58:56 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Wed, 30 Jul 2014 22:58:56 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0 In-Reply-To: <lrbdb8$p18$1@node1.news.atman.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit