IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Ticks Datas, forte volumétrie


Sujet :

MS SQL Server

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut Ticks Datas, forte volumétrie
    Bonjour,

    Je possèdes environ 1to de fichiers binaire de données stocks Ticks (trades and quotes).
    Pour faire simple ce sont des informations de prix des actions.

    une journée pour une action est environ de 100,000 lignes par symboles (certains symbole dépasse le millions).
    j'ai a peu près 5,000 symboles.

    Je cherche à mettre une partie des ces informations en base SQLServer, je démarre sur une version 2016 RC1 afin de profiter des columnstore cluster index, mais je pense que la version 2014 doit permettre de faire la même chose.

    Je vois 4 façons de gérer les données (les champs sont simplifiés),

    solution 1: tout dans la même table en donnant une priorité au symbole
    SymbolId (int)
    DateAndTime (Datetime)
    Price (real)
    Quantity (int)
    + permet de faire du traitement analytique
    - insertion lente de façon quotidienne



    solution 2: tout dans la même table en donnant une priorité à la date
    DateAndTime (Datetime)
    SymbolId (int)
    Price (real)
    Quantity (int)
    + permet de faire du traitement analytique
    - requétes lentes pour un même symbole puisque l'on est trié par date

    solution 3: une table par symbol
    DateAndTime (Datetime)
    Price (real)
    Quantity (int)
    + rapide en insertion et en requete (si symbol unique)
    - analyse compliqué en fonction des besoin

    solution 4: une table par date
    SymbolId (int)
    Price (real)
    Quantity (int)
    + rapide en insertion et en requete (si date unique)
    - analyse compliqué en fonction des besoin

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Pour un index columnstore, l'ordre des colonnes n'a aucune importance, puisque chaque colonne est stockée et considérée individuellement. C'est normal puisque ce type d'index n'a pas de clé.
    Seul un ré-ordonnancement a lieu au niveau du stockage et de façon interne pour optimiser la compression.

    @++

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    Ok, ce qui explique que lors de la creation de l'index columnstore cluster il ne me propose pas le choix des colonnes.
    Dans ce cas sur une table en columnstore cluster, les index non cluster non aucun interet?

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert SQL Server
    Inscrit en
    Août 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Expert SQL Server

    Informations forums :
    Inscription : Août 2009
    Messages : 61
    Points : 454
    Points
    454
    Par défaut
    Yes Sir

    S'il y a un CCI sur une table, tu ne peux pas créer de NCI, ni de NCCI sur cette même table.
    Combinaisons possibles :
    - row store + NCCI (+ NCI)
    - Hekaton (+ InMem index) + NCCI
    Christophe LAPORTE | Independent Consultant & Trainer
    SQL Server Certified Master | Azure Solution Architect

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    De toute façon, la modélisation doit être "indépendante" de la façon de stocker et d'indexer pour être efficace.

    Revoyez vous types de la sorte

    ID BIGINT IDENTITY PRIMARY KEY
    SymbolId (smallint)
    DateAndTime (Datetime2(0))
    Price (decimal(26, 12))
    Quantity (int) --> voir smallint


    Après, alim, créez un index columnstore sur toutes les données non clef !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    Voici à quoi ressemble actuellement la table pour les quotes:
    SymbolId (smallint)
    DateAndTime (Datetime2(3)) -- millisecond
    BidPrice (real) -- pourquoi mettre un decimal ?
    BidSize (int)
    BidExchangeId (tinyint)
    AskPrice (real)
    AskSize (int)
    AskExchangeId (tinyint)
    Condition (tinyint)

    La table à été créer avec un Clustered Columnstore Index
    Elle possède 750 millions de lignes.
    Demander les enregistrement pour un Symbole au hasard d'une journée prend environ 2 minutes (150,000 rows) et il me propose de créer des index couvrant (DateAndTime ,SymbolId) (tous les autres champs)

    Je vais essayer de faire une version telle que vous la proposez soit

    ID IDENTITY PRIMARY KEY
    SymbolId (smallint)
    DateAndTime (Datetime2(3)) -- millisecond
    BidPrice (real) -- pourquoi mettre un decimal ?
    BidSize (int)
    BidExchangeId (tinyint)
    AskPrice (real)
    AskSize (int)
    AskExchangeId (tinyint)
    Condition (tinyint)

    et de mettre un index Columnstore non cluster incluant toutes les colonnes sauf ID

    pensez vous utile de mettre un indice non cluster (DateAndTime ,SymbolId) (tous les autres champs) sachant que la sélection entre 2 dates pour un symbole (ou plusieurs) risque d'être la majeur partie des requêtes ?

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par ash.ice.loky Voir le message
    pensez vous utile de mettre un indice non cluster (DateAndTime ,SymbolId) (tous les autres champs) sachant que la sélection entre 2 dates pour un symbole (ou plusieurs) risque d'être la majeur partie des requêtes ?
    Sans connaître la distribution statistique des données, difficile à dire !

    faites des tests.

    Enfin, partitionnez vos données sur la date ne serait pas du luxe.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 943
    Points : 1 156
    Points
    1 156
    Par défaut
    Dans ce cas une question bete:
    la différence entre
    - un index cluster en colonne et un index en ligne couvrant avec la date
    versus
    - un index cluster en ligne sur ID (bigint) et un index en ligne couvrant avec la date et un index non cluister en colonne ?

  9. #9
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Comme vous l'indiquait SQLPro, il vous faut tester les différences.
    Nous ne connaissons pas la distribution des valeurs dans vos colonnes, et d'ailleurs celle-ci change avec le temps.
    Revoyez donc le plan de requête et la sortie de SET STATISTICS IO.

    @++

Discussions similaires

  1. [8i] Origine forte volumétrie
    Par couse1 dans le forum Administration
    Réponses: 3
    Dernier message: 09/01/2013, 18h35
  2. Support bases de données avec très forte volumétrie
    Par fgalves dans le forum PostgreSQL
    Réponses: 12
    Dernier message: 06/10/2009, 17h37
  3. choix d'un SGBD pour une très forte volumétrie
    Par fgalves dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 24/06/2009, 17h27
  4. Réponses: 6
    Dernier message: 21/10/2008, 22h45
  5. [Pointer]Treeview.Data
    Par rbag dans le forum Composants VCL
    Réponses: 7
    Dernier message: 31/08/2002, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo