{{tag>Brouillon}} = Data - notes générales sur les données Liste SQL DBMS : * https://en.m.wikipedia.org/wiki/Lists_of_database_management_systems * https://docs.sqlalchemy.org/en/20/dialects/ Voir : * https://fr.wikipedia.org/wiki/CRUD * https://docs.ansible.com/ansible/2.9/modules/list_of_database_modules.html * https://pepi2g.wiki.inrae.fr/doku.php?id=infrastructures_big_data == SQL Sécurité Voir : * SQLmap == Différents paradigmes : modèles [[https://fr.wikipedia.org/wiki/Mod%C3%A8le_de_donn%C3%A9es|Modèle de données]] Données structurées, semi structurées, non structurées * https://en.wikipedia.org/wiki/Semi-structured_data * https://en.wikipedia.org/wiki/Semi-structured_model Non structuré * https://www.ibm.com/fr-fr/think/topics/milvus * https://www.ibm.com/fr-fr/think/topics/vector-search Database management system provides mechanism for storage and retrieval of data. There are three main types of database management systems namely RDBMS (Relational Database management Systems), OLAP (Online Analytical Processing Systems) and NoSQL. https://en.m.wikipedia.org/wiki/Lists_of_database_management_systems https://en.m.wikipedia.org/wiki/List_of_databases_using_MVCC https://github.com/gostor/awesome-go-storage#database Clef valeur : Valkey (Redis), etcd, BoltDB / bbolt (embedded key/value database), TiKV (cncf.io) Voir : https://juicefs.com/docs/community/databases_for_metadata/ Ddistributed vector database : Milvus https://en.wikipedia.org/wiki/Milvus_(vector_database) Db orientées documents : CoucheDB, MongoDB, TinyDB base de données orientée graphe : Neo4j, OrientDB, TinkerPop (OLAP & OLTP) Fichiers plats : CSV, JSON, YAML, XML, HDF5 column-oriented database : ClickHouse, hbase (HDFS) Semi-structured data : XML; HTML, JSON, YAML Autres : LMDB Lightning Memory-Mapped Database : Base de données en mémoire et NoSQL indépendamment de cela il existe des bases de données optimisées pour de la lecture : LDAP, etcd... RDF / [[https://fr.wikipedia.org/wiki/Triplestore|Triplestore]] Prometheus Scalable horizontalement * Vitess (Scalable. Reliable. MySQL-compatible. Cloud-native) (Voir http://cncf.io) === Multi modèle https://en.m.wikipedia.org/wiki/OrientDB === Données semi structurées https://www.dokuwiki.org/plugin:strata Voir : * https://www.prologism.fr/wp-content/uploads/2020/08/PROLOGISM_BigData-GestionDonneesSemi-Structurees-SQL.pdf * https://docs.snowflake.com/en/user-guide/semistructured-intro.html * https://docs.snowflake.com/en/user-guide/semistructured-concepts.html Serveurs : * https://en.m.wikipedia.org/wiki/XML_database * https://en.m.wikipedia.org/wiki/BaseX * [[https://en.m.wikipedia.org/wiki/Sedna_(database)]] === Multi-model databases https://en.m.wikipedia.org/wiki/Comparison_of_multi-model_databases === OLTP vs OLAP ==== En bref ==== OLTP (OnLine Transaction Processing) [[https://fr.wikipedia.org/wiki/Traitement_transactionnel_en_ligne|Traitement transactionnel en ligne]] ==== OLAP (OnLine Analytical Processing) (Analyse multi-dimensionnelle) Voir : * [[https://fr.wikipedia.org/wiki/Traitement_analytique_en_ligne|Traitement analytique en ligne]] * https://fr.wikipedia.org/wiki/Informatique_d%C3%A9cisionnelle * https://fr.wikipedia.org/wiki/Multidimensional_Expressions * https://www.guru99.com/online-analytical-processing.html * https://en.m.wikipedia.org/wiki/Comparison_of_OLAP_servers * https://www.softwaretestinghelp.com/best-olap-tools/ * https://www.guru99.com/oltp-vs-olap.html * https://www.geeksforgeeks.org/olap-operations-in-dbms/ * https://www.lebigdata.fr/olap-online-analytical-processing * https://olap.com/types-of-olap-systems/ * https://www.tutorialspoint.com/dwh/dwh_olap.htm ==== OLEP OnLine Event Processing Event logs Event-Oriented Database EventQL ==== Explication Suivant l'activité de l'entreprise, les besoins d'exécution du métier peuvent imposer des contraintes techniques. Les différentes technologies de bases de données se répartissent en deux grandes familles suivant leurs missions principales. Les bases de données ayant vocation à stocker des données en temps réel. C'est le cas des bases de données MySQL ou MongoDB. On les catégorise comme bases de données **OLTP** (Online transaction processing). D'autres technologies ont l'analyse de données au cœur de leurs préoccupations. Il s'agit de bases de données **OLAP** (OnLine Analytical Processing). Elles sont capables de traiter d'importants volumes de données rapidement afin de produire différents rapports. // Source : https://practicalprogramming.fr/snowflake // ==== Technos / Serveurs / outils transaction processing (OLTP) and analytical processing (OLAP) workloads. Olap tools & servers : * [[https://olappivottableextensions.github.io/|OLAP PivotTable]] * ClickHouse (Par Yandex) * [[https://en.wikipedia.org/wiki/Apache_Kylin|Apache Kylin]] * LucidDB * Langage R * Python Anaconda * Jasp * Jamovi * Palo OLAP Server * Pentaho BI * Mondrian * OBIEE (Oracle Business Intelligence Enterprise Edition) * JsHypercube Voir : https://en.wikipedia.org/wiki/Comparison_of_OLAP_servers ClickHouse https://m.youtube.com/watch?v=FsVrFbcyb84 === OLAP - Data Lake vs Data Warehouse Voir https://practicalprogramming.fr/snowflake Le Data Warehouse base l'exploitation des données qu'il renferme sur un processus d'**ETL** (Extract, Tranform, Load) permettant de charger les données issues des différentes applications. ==== ETL Voir : * https://business-intelligence.developpez.com/tutoriels/etl-open-source/?page=Introduction Outils : * Airbyte * Apache NiFi * Apache Camel * Jaspersoft ETL * Apache Kafka * Apache Airflow * CloverETL * Scriptella * Pentaho Kettle * Talend Open Studio * KETL * HPCC Systems * GeoKettle * CloverETL * Apatar * Cloudera * BIRT == Langages https://en.m.wikipedia.org/wiki/Query_language * SQL * PartiQL * OQL * SPARQL https://en.m.wikipedia.org/wiki/List_of_SPARQL_implementations * RDF query language * XQuery * XPath * XSLT * GraphQL (voir https://github.com/cayleygraph/cayley) * AQL (ArangoDB Query Language) * ReQL (RethinkDB) * Spark_SQL (Spark) * N1QL (CouchBase) * [[https://fr.wikipedia.org/wiki/Multidimensional_Expressions|MDX]] (Olap) * [[https://en.m.wikipedia.org/wiki/Gremlin_(query_language)]] (Olap & Oltp) * Gremlin (Neo4j, Orientdb, TinkerPop) * JMESPath is a query language for JSON * PromQL (Prometheus) == Serveurs Voir : https://db-engines.com/en/ranking * Postgres (SQL & NoSQL) * MongoDB et [[https://www.ferretdb.io/|FerretDB]] * CoucheDB et [[https://pouchdb.com/|PouchDB]] * SQLite * Neo4j * [[https://github.com/pingcap/tidb|TiDB]] (Horizontal Scalability - MySQL Compatible Syntax) === Config Sur la plupart des bases de données comme Redis / Valkey, MongoDB, RabbitMQ, CouchBase, Kafka désactiver les Transparent Huge Pages il est recommandé de désactiver **transparent_hugepages_thp [[memoire_linux|Transparent HugePages THP]]** Parametre Kernel : net.ipv4.ip_local_port_range Valeur attendue : Min 9000 Max 65500 Valeur constatée : Min 32768 Max 65535 CFQ : deadline === Proxy DB / Pooler Peut être une solution pour faire du sharding Voir : * ProxySQL * pgBouncer * [[https://plproxy.github.io|PL/Proxy]] == Outils DB Migration schéma : * [[https://en.wikipedia.org/wiki/Flyway_(software)]] Backup : * Barman (Postgresql backup) == NoSQL Requête sur des bases NoSQL http://b3d.bdpedia.fr/bddoc.html Comparaison https://hackolade.com/help/NoSQLdatabasesJSONRESTAPIs.html The CAP theorem states that any distributed database can only have a maximum of two of three desirable qualities: consistency, availability, and partition tolerance. * Consistency: All clients always have the same view of the data. * Availability: All clients can read from and write to the database at all times. * Partition tolerance: The database cluster can keep working even if communication between nodes breaks down. Voir aussi : [[https://fr.wikipedia.org/wiki/Propri%C3%A9t%C3%A9s_ACID|Propriétés ACID]] == Connecteurs Voir : https://www.ibm.com/docs/en/psfa/7.2.1?topic=configuration-overview-odbc-jdbc-ole-db-net * ODBC * JDBC == Client Multi bases Voir : * [[https://en.m.wikipedia.org/wiki/DBeaver|DBeaver]] * isql / iusql (via ODBC) * Adminer === Adminer Adminer est compatible : * MySQL / MariaDB * PostgreSQL * SQLite * MS SQL * Oracle * Elasticsearch * MongoDB, SimpleDB (plugin) * Firebird (plugin) * ClickHouse (plugin) == Question - besoin Pour quelle finalité : pour du traitement ou pour de l'analytique (OLTP ou OLAP) ? Les données sont-elles déjà formatées ? * Si oui quel format * Sont-elle structurées - semi structurées ou non structurées ? Quelle quantité de données ? Quels IO ? Besoin de mise à l'échelle horizontale (scalabilité) ? Besoin par rapport au théorème CAP (Théorème de Brewer) ? * Besoin des propriétés ACID ? * Besoin haute disponibilité ? Les données doivent-elle être présentées à l'appli via une couche d'abstraction tel que : * [[https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping|ORM - Mapping objet-relationnel]] * [[https://en.wikipedia.org/wiki/Data_mapper_pattern|Data Mapper]] (ex SQLAlchemy) vs [[https://en.wikipedia.org/wiki/Active_record_pattern|Active record]] * https://sgbd.developpez.com/actu/261037/Faut-il-utiliser-les-ORM-ou-continuer-d-ecrire-simplement-des-requetes-SQL-Eli-Bendersky-donne-son-avis/ * Object-Document Mapper (ODM) (ex mincePy) * [[https://en.wikipedia.org/wiki/Database_abstraction_layer|DAL - Database Abstraction Layer]] * Connecteur ODBC, JDBC, API Test Quels sont les besoin en terme de persistance ? * Est-ce qu'un In memory database peut convenir ? Fait-il une gestion de version (MVCC) ? Est-ce plus pour de la lecture ou lecture / écriture ? ---- == Autres Meta DB * Virtuoso Universal Server * DBeaver Autres: * https://en.wikipedia.org/wiki/Data-oriented_design === Colonnes HDFS HBASE HBase est un système de gestion de base de données non relationnelle orienté colonnes qui fonctionne sur HDFS hdfs dfs -ls / hbase hbck -details == Outils de visualisation de données * [[https://linuxfr.org/news/paraview-5-11|ParaView]]