Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
Do hodnoty se uloží konkrétní, klíče, které relaci určují:
K1: 'RELACE', KV1, KV2, KV3, ...
No přesněji takto:
K1: 'RELACE', KV11, KV12, KV13, ...
K2: 'RELACE', KV21, KV22, KV23, ...
...
A nebo takto:
R: N1
N1: V11, V12, N2
N2: V21, V22, null
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Citace od: zboj kdy 03. 06. 2017, 16:28:01
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Na to jsi přišel jak? Běžně se používají hashmapy a jde to také.
Citace od: Kit kdy 03. 06. 2017, 16:55:47
Citace od: zboj kdy 03. 06. 2017, 16:28:01
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Na to jsi přišel jak? Běžně se používají hashmapy a jde to také.
Jak uděláš index relace nad KV úložištěm, které nejde procházet sekvenčně?
Citace od: zboj kdy 03. 06. 2017, 17:27:06
Citace od: Kit kdy 03. 06. 2017, 16:55:47
Citace od: zboj kdy 03. 06. 2017, 16:28:01
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Na to jsi přišel jak? Běžně se používají hashmapy a jde to také.
Jak uděláš index relace nad KV úložištěm, které nejde procházet sekvenčně?
v redisu jdou nesetříděné klíče procházet sekvenčně.
Citace od: zboj kdy 03. 06. 2017, 17:27:06
Citace od: Kit kdy 03. 06. 2017, 16:55:47
Citace od: zboj kdy 03. 06. 2017, 16:28:01
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Na to jsi přišel jak? Běžně se používají hashmapy a jde to také.
Jak uděláš index relace nad KV úložištěm, které nejde procházet sekvenčně?
Pokud to úložiště nelze procházet sekvenčně, tak ten index relace neuděláš, ani když jsou seřazené. Hashmapa i seřazené záznamy tedy vyjdou nastejno.
Kromě toho ten index relace není nezbytnou podmínkou. Úloha se dá splnit i bez něj.
Citace od: Kit kdy 03. 06. 2017, 19:24:59
Citace od: zboj kdy 03. 06. 2017, 17:27:06
Citace od: Kit kdy 03. 06. 2017, 16:55:47
Citace od: zboj kdy 03. 06. 2017, 16:28:01
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Na to jsi přišel jak? Běžně se používají hashmapy a jde to také.
Jak uděláš index relace nad KV úložištěm, které nejde procházet sekvenčně?
Pokud to úložiště nelze procházet sekvenčně, tak ten index relace neuděláš, ani když jsou seřazené. Hashmapa i seřazené záznamy tedy vyjdou nastejno.
Kromě toho ten index relace není nezbytnou podmínkou. Úloha se dá splnit i bez něj.
Úloha je relační databáze s indexy nad (vybranými) sloupci. To jde na KV úložištěm udělat jen při použití sekvenčního procházení v lexikografickém pořadí, jiná cesta není (pokud nechci procházet všechny páry v úložišti, což je krávovina). Tečka.
Citace od: zboj kdy 03. 06. 2017, 16:28:01
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Jak se teda dělá uložení záznamu a hledání v indexu?
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Citace od: Kit kdy 03. 06. 2017, 20:08:40
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Z definice relační databáze.
Citace od: zboj kdy 03. 06. 2017, 20:09:54
Citace od: Kit kdy 03. 06. 2017, 20:08:40
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Z definice relační databáze.
V definici relační databáze není o indexech ani zmínka.
Citace od: Kit kdy 03. 06. 2017, 20:08:40
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Pojem relační implikuje hledání podle indexů. Když nevíš, jak se to implementuje, tak kušuj (to platí pro všechny trolly).
Citace od: SqlCunt kdy 03. 06. 2017, 20:17:20
Citace od: Kit kdy 03. 06. 2017, 20:08:40
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Pojem relační implikuje hledání podle indexů. Když nevíš, jak se to implementuje, tak kušuj (to platí pro všechny trolly).
Relační neimplikuje hledání podle indexů, relace nemusí být setříděná, a ani setřídění v dané relaci nemusí vůbec dávat smysl. Relační databáze jsou relační proto, že využívají k zachycení reality relace, tedy ne nutně uspořádané soubory uspořádaných entic. Indexy jsou tam navíc, souvisí s praktickou implementací, klidně by mohly být realizovány hardwarově asociativní pamětí, nebo neuronovou sítí.
Citace od: SqlCunt kdy 03. 06. 2017, 20:06:30
Citace od: zboj kdy 03. 06. 2017, 16:28:01
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
To jde jen tehdy, když jsou klíče v úložišti setříděné.
Jak se teda dělá uložení záznamu a hledání v indexu?
Každé pole záznamu má klíč tabulka:uid:pole. Pro načtení záznamu stačí použít dolní mez tabulka:uid: k iteraci přes všechna pole záznamu. Indexy mají klíč index:pole:hodnota a jako hodnotu seznam uid. Pro vyhledání se pak použije dolní mez index:pole:hodnota. Stěžejní je schopnost úložiště nalézt nejbližšího následníka podle lexikografického uspořádání. Taková implementace je optimální (lépe to nejde) a typicky se používá něco jak B+ strom, aby vyhledání bylo vždy O(log n).
Zboj zas píše o něčem co nezná.
tabulku reprezentuji dvojicemi primarni_klic radek. Některé databáze podporují víc klíčů pro jednu hodnotu, tam není co řešit. V ostatních lze odkazovat přes primární klíč. Klíče pro jednotlivé sloupce mohu odlišovat prefixy, nebo je ukládat do zvláštní datové struktury.
Citace od: Ivan Nový kdy 03. 06. 2017, 20:31:43
Citace od: SqlCunt kdy 03. 06. 2017, 20:17:20
Citace od: Kit kdy 03. 06. 2017, 20:08:40
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Pojem relační implikuje hledání podle indexů. Když nevíš, jak se to implementuje, tak kušuj (to platí pro všechny trolly).
Relační neimplikuje hledání podle indexů, relace nemusí být setříděná, a ani setřídění v dané relaci nemusí vůbec dávat smysl. Relační databáze jsou relační proto, že využívají k zachycení reality relace, tedy ne nutně uspořádané soubory uspořádaných entic. Indexy jsou tam navíc, souvisí s praktickou implementací, klidně by mohly být realizovány hardwarově asociativní pamětí, nebo neuronovou sítí.
Nebo kvantovým algoritmem :)
Citace od: SqlCunt kdy 03. 06. 2017, 20:17:20
Citace od: Kit kdy 03. 06. 2017, 20:08:40
Citace od: zboj kdy 03. 06. 2017, 19:52:55
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Pojem relační implikuje hledání podle indexů. Když nevíš, jak se to implementuje, tak kušuj (to platí pro všechny trolly).
Kdybys napsal, že chceš relační databázi s indexy, tak bych ti byl poradil. Denně používám několik typů relačních databází. Některé s indexy a některé bez nich. Uvedená implikace neplatí.
Pokud potřebuješ indexy, použij místo KV databáze raději relační. Bude s tím méně práce. Bývá na každém hostingu (i těch zdarma) a můžeš jich tam mít v aplikaci kolik chceš.
Citace od: zboj kdy 03. 06. 2017, 20:33:57
Citace od: Ivan Nový kdy 03. 06. 2017, 20:31:43
Relační neimplikuje hledání podle indexů, relace nemusí být setříděná, a ani setřídění v dané relaci nemusí vůbec dávat smysl. Relační databáze jsou relační proto, že využívají k zachycení reality relace, tedy ne nutně uspořádané soubory uspořádaných entic. Indexy jsou tam navíc, souvisí s praktickou implementací, klidně by mohly být realizovány hardwarově asociativní pamětí, nebo neuronovou sítí.
Nebo kvantovým algoritmem :)
Ten je možné použít také, ale většinou si v takových případech vystačíme s fuzzy logikou.
Citace od: SqlCunt kdy 03. 06. 2017, 20:17:20
Pojem relační implikuje hledání podle indexů. Když nevíš, jak se to implementuje, tak kušuj (to platí pro všechny trolly).
Nikoli. Pojem ,,relační databáze" je založený na matematických relacích a znamená, že máte data reprezentovaná v tabulkách (relacích), přičemž všechny řádky tabulky mají stejné sloupce. S indexy to nemá vůbec nic společného. Tabulka relační databáze je například i následující seznam osob s datem narození:
- Eliška, Malá, 19. 3. 1986
- Jan, Novák, 13. 6. 2001
- Tamara, Brzobohatá, 17. 12. 1967
V KV databázi to vyjádříte tak, že jednotlivé řádky uložíte třeba jako hodnoty s vnitřní strukturou, nebo do hodnot LV databáze uložíte jednotlivé hodnoty (hodnotu atributu pro daný záznam), ale strukturovaný bude klíč (třeba
ID_záznamu.ID_atributu).
Citace od: zboj kdy 03. 06. 2017, 20:32:29
Stěžejní je schopnost úložiště nalézt nejbližšího následníka podle lexikografického uspořádání. Taková implementace je optimální (lépe to nejde) a typicky se používá něco jak B+ strom, aby vyhledání bylo vždy O(log n).
https://redis.io/commands/scan
"Time complexity: O(1) for every call."
Citace od: gll kdy 04. 06. 2017, 13:04:59
Citace od: zboj kdy 03. 06. 2017, 20:32:29
Stěžejní je schopnost úložiště nalézt nejbližšího následníka podle lexikografického uspořádání. Taková implementace je optimální (lépe to nejde) a typicky se používá něco jak B+ strom, aby vyhledání bylo vždy O(log n).
https://redis.io/commands/scan
"Time complexity: O(1) for every call."
Prave ste poukazali na fakt, ze Redis drzi kluce v hash tabulke a nie v B+strome. Preto si rad pozriem ako vam
SCAN bude vracat "
nejbližšího následníka podle lexikografického uspořádání".
Vasu argumentaciu ste mohli postavit aj na prikaze
ZSCAN (https://github.com/antirez/redis/blob/4.0/src/t_zset.c#L31-L57), ale ani to by vam nepomohlo, kedze implementacia v Redise pouziva skip listy (https://en.wikipedia.org/wiki/Skip_list) a INSERT a REMOVE su spoplatnene komplexitou
O(log n). Predpokladam, ze pre search kluca pre zaciatok iteracie pouzije hash.
Nehovoriac o tom, ze Redis je in-memory store. Co v pripade, ak mate tolko klucov, ze sa vam cela hash tabulka (+ dalsie podporne struktury v pripade Sorted sets) a hodnoty nevojdu do pamate (https://redis.io/topics/faq#i-like-redis39s-high-level-operations-and-features-but-i-don39t-like-that-it-takes-everything-in-memory-and-i-can39t-have-a-dataset-larger-the-memory-plans-to-change-this)?
Citace od: kimec kdy 05. 06. 2017, 10:23:58
Citace od: gll kdy 04. 06. 2017, 13:04:59
Citace od: zboj kdy 03. 06. 2017, 20:32:29
Stěžejní je schopnost úložiště nalézt nejbližšího následníka podle lexikografického uspořádání. Taková implementace je optimální (lépe to nejde) a typicky se používá něco jak B+ strom, aby vyhledání bylo vždy O(log n).
https://redis.io/commands/scan
"Time complexity: O(1) for every call."
Prave ste poukazali na fakt, ze Redis drzi kluce v hash tabulke a nie v B+strome. Preto si rad pozriem ako vam SCAN bude vracat "nejbližšího následníka podle lexikografického uspořádání".
To bych taky rád viděl. Spíš ten osel ukázal na fakt, že absolutně neví, o čem se tu bavíme.
Citace od: kimec kdy 05. 06. 2017, 10:23:58
Nehovoriac o tom, ze Redis je in-memory store. Co v pripade, ak mate tolko klucov, ze sa vam cela hash tabulka (+ dalsie podporne struktury v pripade Sorted sets) a hodnoty nevojdu do pamate (https://redis.io/topics/faq#i-like-redis39s-high-level-operations-and-features-but-i-don39t-like-that-it-takes-everything-in-memory-and-i-can39t-have-a-dataset-larger-the-memory-plans-to-change-this)?
V takovém případě se obvykle přidá paměť nebo se neklíčové atributy uloží do souborového systému. V Redisu se pak uchovávají jen klíčové položky a URL.
Citace od: SqlCunt kdy 02. 06. 2017, 15:44:35
Už několikrát jsem při čtení o databazích narazil na zmínku, že relační databáze jde postavit nad KV úložištěm, ale nepodařilo se mi vygooglit nic bližšího. Jak se tabulky ukládají, když jsou k dispozici jen klíče?
Pre uplnost, presny priklad vasej definicie je Apache Phoenix , t.j. relacna databaza nad KV uloziskom.
KV ulozisko je v tomto pripade HBase s jedinym indexom podla vzostupne radenych rowkey. Phoenix vyuziva HBase koprocesory a custom filtre pri skenovani klucov tak, aby vycaroval pocit relacnosti. Zaujimave su secondary indexy, ktore generuje tiez cez koprocesory a to tak, ze obsahuju celu strukturu stlpcov a data z primarnej tabulky, takze pri skene cez secondary index pouzije data rovno z indexu. Ano, vnizkaju tam duplicity. Ale to predsa pri Big Data nie je problem.