🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi.bazy-danych
Article #82244

Re: zmiana klucza z int na string

#82244
From: Arivald
Date: Wed, 30 Jul 2014 22:59
50 lines
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-mail
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>

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