Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: SqlCunt 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?
-
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
-
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é.
-
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é.
-
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ě?
-
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ě.
-
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.
-
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.
-
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?
-
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
-
Úloha je relační databáze s indexy nad (vybranými) sloupci...
To jsi vyčetl kde?
Z definice relační databáze.
-
Ú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.
-
Ú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).
-
Ú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í.
-
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.
-
Ú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 :)
-
Ú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š.
-
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.
-
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).
-
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."
-
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)?
-
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.
-
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.
-
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.