Che Posted November 20, 2021 Report Posted November 20, 2021 Salut! Am reusit intr-un final si am descarcat toate ticker-ele de pe Yahoo! Finance folosind libraria din python numite yfinance. Acum as vrea sa le bag pe toate intr-o baza de date. Problema este ca nu stiu cum sa fac aceasta baza de date din moment ce am peste 350.00 de tickers iar ca si values adica istoricul pretului pe zi pentru fiecare este ~38.000. Eu initial voiam sa le bag in SQLite dar SQLite suporta maximum 2000 de coloane iar daca o recompilezi poate suporta maximum ~32.000 de coloane. Vreau sa le bag pe toate intr-o baza de date pentru rapiditatea interogarii si de asemenea ma intreseaza sa afisez urmatoarele chestii: Care sunt tickerele cu cea mai mare scadere in perioada X? Care sunt tickerele cu cea mai mare crestere in perioada Y? etc. Banuiesc ca pentru acest lucru ar trebui sa ai tabelul de forma: Ticker1|Ticker2|Ticker3|...|TickerN| Adica tickers sub forma de coloane iar randurile sub forma de istoric al pretului. Chestia este ca nu poti baga toate ticker-ele ca si coloane din moment ce ele sunt ~350.000 ca numar. Si daca faci asa, cum faci data ca si ZI sa fie autoincrement ca in loc de index si cum faci un query cu select ca sa selectezi o perioada in functie de data? Pe urma nu poti pune nici baza de date invers adica: Day1|Day2|Day3|Day4|Day5|...|DayN| Adica zilele ca si coloane iar pe randuri sa ai fiecare ticker si orizontal, dupa el, fiecare istoric de pret pe fiecare zi. Nu poti pune fiindca maximum suportat este 2000 si tu ai ~38.000 de unitati. Si daca faci asa, cum ai selecta pentru o anumita perioada? Multumesc mult de tot pentru ajutor! Quote
yoyois Posted November 20, 2021 Report Posted November 20, 2021 Avand in vedere ca datele sunt relativ unstructured si ai multe, eu unul ma gandesc la BigData. Poate MongoDB, poate hadoop. Ceva orientat pe documente. SQL e prea inflexibil pentru care date ai tu, incearca NoSQL. https://kb.objectrocket.com/mongo-db/how-to-import-a-csv-into-mongodb-327 https://stackoverflow.com/questions/32076382/mongodb-how-to-get-max-value-from-collections 1 2 Quote
Che Posted November 20, 2021 Author Report Posted November 20, 2021 2 hours ago, yoyois said: Avand in vedere ca datele sunt relativ unstructured si ai multe, eu unul ma gandesc la BigData. Poate MongoDB, poate hadoop. Ceva orientat pe documente. SQL e prea inflexibil pentru care date ai tu, incearca NoSQL. https://kb.objectrocket.com/mongo-db/how-to-import-a-csv-into-mongodb-327 https://stackoverflow.com/questions/32076382/mongodb-how-to-get-max-value-from-collections Vad ca MongoDB este un fel de JSON, ma gandesc ca va fi o baza de date uriasa ca si rezultat. Nu prea inteleg ce este hadoop si cum se foloseste. Are aici documentatia, m-am uitat asa rapid dar nu vad vreun tutorial concret cum sa creezi o baza de date, cum sa creezi un tabel si sa adaugi date in el. https://hadoop.apache.org/docs/current/ Este de fapt o librarie cum este cea de XGBoost din python ca parca imi amintesc ca am vazut mai demult ceva pe YouTube despre predictia pariurilor sportive bazate pe hadoop? Quote
gigiRoman Posted November 20, 2021 Report Posted November 20, 2021 15 minutes ago, Che said: Nu prea inteleg ce este hadoop si cum se foloseste. Apache Hadoop is an open source framework that is used to efficiently store and process large datasets ranging in size from gigabytes to petabytes of data. Instead of using one large computer to store and process the data, Hadoop allows clustering multiple computers to analyze massive datasets in parallel more quickly. 1 Quote
dimss Posted November 20, 2021 Report Posted November 20, 2021 Salut! La volumetria pe care o zici 350k + 38k zilnic, as zice ca MariaDB s-ar misca foarte bine. Bineinteles conteaza cum creezi structura bazei si cum extragi datele. Sa te asiguri ca ai performanta o tabela partitionata pe timp si niste query-uri care sa foloseasca windows functions merg foarte bine. Pot sa garantez ca functioneaza pentru ca am creat o solutie asemanatoare care se afla in productie iar baza are 2.5 TB cu milioane de inserturi pe ora. 2 Quote
Che Posted November 20, 2021 Author Report Posted November 20, 2021 (edited) 4 hours ago, dimss said: Salut! La volumetria pe care o zici 350k + 38k zilnic, as zice ca MariaDB s-ar misca foarte bine. Bineinteles conteaza cum creezi structura bazei si cum extragi datele. Sa te asiguri ca ai performanta o tabela partitionata pe timp si niste query-uri care sa foloseasca windows functions merg foarte bine. Pot sa garantez ca functioneaza pentru ca am creat o solutie asemanatoare care se afla in productie iar baza are 2.5 TB cu milioane de inserturi pe ora. Dar zice ca are ca limita maxim 4086 coloane care poate fi chiar si mai putin, totul fiind in functie de marimea datelor. Cum pot pune ca si coloane acele tickere daca ele sunt 350.000+ ? Si nici ca si zi nu pot sa pun coloanele iar prima coloana sa fie indexul iar a doua sa fie ticker_id fiindca sunt ~38.000 de valori pentru un ticker. Cum as putea sa le integrez? Cum ar trebui sa arate designul (structura) bazei de date ca pe mine asta ma intereseaza de fapt? Multumesc mult! Edited November 20, 2021 by Che Quote
Wav3 Posted November 20, 2021 Report Posted November 20, 2021 Sper ca nu incerci sa spui ca suporta DOAR 4096 coloane Doar n-ai de gand sa faci cate o coloana pentru fiecare moneda. Fa tabel de monede (cheie primara, symbol, etc ce mai vrei) si tabel de preturi (fk_moneda - adica id-ul din tabelul de monede, pret, data, etc ce mai vrei tu). Apoi interoghezi usor diverse cazuri. Eu as merge pe MySQL ca imi place mie. 1 3 Quote
dimss Posted November 21, 2021 Report Posted November 21, 2021 Structura bazei o faci in functie de datele pe care vrei sa le stochezi. Nu as sti sa iti spun exact o structura fara sa imi dai un exemplu concret al modelului de date care urmeaza a fi stocate. 1 Quote
Che Posted November 21, 2021 Author Report Posted November 21, 2021 18 hours ago, Wav3 said: Sper ca nu incerci sa spui ca suporta DOAR 4096 coloane Doar n-ai de gand sa faci cate o coloana pentru fiecare moneda. Multumesc! Ba chiar asa aveam de gand sa fac. Quote
gigiRoman Posted November 21, 2021 Report Posted November 21, 2021 43 minutes ago, Che said: Multumesc! Ba chiar asa aveam de gand sa fac. Poti incepe cu un curs basic de sql. 1 3 Quote