Quelle structure de données choisir pour un grand volume
Fermé
fatmanajjar
Messages postés
15
Date d'inscription
dimanche 27 mai 2012
Statut
Membre
Dernière intervention
8 juin 2017
-
Modifié le 8 juin 2017 à 14:31
Utilisateur anonyme - 11 juin 2017 à 00:05
Utilisateur anonyme - 11 juin 2017 à 00:05
A voir également:
- Quelle structure de données choisir pour un grand volume
- Reinstaller windows sans perte de données - Guide
- Effacer les données de navigation - Guide
- Alexia organise un appel vidéo avec ses grand-parents qui ne veulent pas installer de logiciel ou d’application, ni créer un compte. - Forum Webmastering
- Exemple base de données access à télécharger gratuit - Forum Access
- Mélangeur de volume - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
8 juin 2017 à 21:36
8 juin 2017 à 21:36
fatmanajjar, tu en es déjà à 5 discussions différentes sur les forums et ce concernant le même problème. Il faudrait que tu évites de polluer les forums parce qu'en t'éparpillant tu égrennes des informations un peu partout mais aucune discussion ne contient vraiment l'intégralité de ton problème, et même après 5 discussions, comme avec YCN, on ne sait toujours pas quelles sont tes besoins et contraintes exacts.
"mon but est de traiter un grand volume de données en temps réel"
Quelle est ta volumétrie ? On parle de Mo ? de Go ? de To ?
Est-il seulement pertinent de les stocker en mémoire ?
Et quand tu dis "temps réel" qu'est ce que ça veut dire pour toi ?
Remarque : sans aller dans le détail, il existe une branche de l'informatique bien adapté aux calculs sur les matrices, c'est le parallélisme. Les algorithmes varieront bien sûr en fonction du nombre de ressources (ordinateurs, processeurs) que tu peux allouer à ton calcul.
Et même si tu n'écoutes pas les réponses que tu as déjà pu avoir, de ma part notamment, ce n'est pas en grignotant quelques octets sur un BitSet que tu vas résoudre ton problème. Il faut revoir tes algorithmes et leurs complexité en temps et en mémoire.
"mon but est de traiter un grand volume de données en temps réel"
Quelle est ta volumétrie ? On parle de Mo ? de Go ? de To ?
Est-il seulement pertinent de les stocker en mémoire ?
Et quand tu dis "temps réel" qu'est ce que ça veut dire pour toi ?
Remarque : sans aller dans le détail, il existe une branche de l'informatique bien adapté aux calculs sur les matrices, c'est le parallélisme. Les algorithmes varieront bien sûr en fonction du nombre de ressources (ordinateurs, processeurs) que tu peux allouer à ton calcul.
Et même si tu n'écoutes pas les réponses que tu as déjà pu avoir, de ma part notamment, ce n'est pas en grignotant quelques octets sur un BitSet que tu vas résoudre ton problème. Il faut revoir tes algorithmes et leurs complexité en temps et en mémoire.
YCN-
Messages postés
116
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
13 juillet 2017
12
8 juin 2017 à 14:39
8 juin 2017 à 14:39
Salut,
Bon déjà je crois qu'il y a deux choses d'importantes, quelle type de données? Dois tu les trier en temps réel ?
Ensuite je pense qu'il faut que tu approfondisse un peu ta question afin que l'on puisse vraiment t'aider.
Tout dépend vraiment de ce que tu veux faire exactement. Il existe pas mal de structure de données, par exemple : les tableaux, les FIFO (& co), les buffer circulaires, les listes chaînés, les arbres (...). Tu ne peux pas obtenir de conseil avec des indications aussi floues.
Bon déjà je crois qu'il y a deux choses d'importantes, quelle type de données? Dois tu les trier en temps réel ?
Ensuite je pense qu'il faut que tu approfondisse un peu ta question afin que l'on puisse vraiment t'aider.
Tout dépend vraiment de ce que tu veux faire exactement. Il existe pas mal de structure de données, par exemple : les tableaux, les FIFO (& co), les buffer circulaires, les listes chaînés, les arbres (...). Tu ne peux pas obtenir de conseil avec des indications aussi floues.
fatmanajjar
Messages postés
15
Date d'inscription
dimanche 27 mai 2012
Statut
Membre
Dernière intervention
8 juin 2017
8 juin 2017 à 15:04
8 juin 2017 à 15:04
Bonjour
Je vous remercie pour votre retour.
Oui, je doit trier et faire des operations logiques sur les données en temps réel.
J'ai commencé par un petit programme qui traite des données stockées dans un fichier.
Mais mon but est de traiter un grand volume de données en temps réel.
Je vous remercie pour votre retour.
Oui, je doit trier et faire des operations logiques sur les données en temps réel.
J'ai commencé par un petit programme qui traite des données stockées dans un fichier.
Mais mon but est de traiter un grand volume de données en temps réel.
YCN-
Messages postés
116
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
13 juillet 2017
12
8 juin 2017 à 15:17
8 juin 2017 à 15:17
Ce n'est toujours pas plus clair... Je vous laisse réfléchir à quels sont les éléments importants de votre projet.
Pour réfléchir avec vous il faut des éléments.
Cependant puisque vous semblez être débutante je vous conseille dans un premier temps d'utiliser des tableaux puis d'optimiser ensuite votre structure de donnée.
- Quel langage?
- Quel domaine?
- Pourquoi ?
- D'ou vienne les données?
- Quels sont ces données? Comment arrivent t elles ?
- Quels sont vos "opérations" logiques? Juste des OU, ET, XOR, NAND?
- Est ce bit à bit?
Pour réfléchir avec vous il faut des éléments.
Cependant puisque vous semblez être débutante je vous conseille dans un premier temps d'utiliser des tableaux puis d'optimiser ensuite votre structure de donnée.
fatmanajjar
Messages postés
15
Date d'inscription
dimanche 27 mai 2012
Statut
Membre
Dernière intervention
8 juin 2017
>
YCN-
Messages postés
116
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
13 juillet 2017
8 juin 2017 à 15:41
8 juin 2017 à 15:41
J'utilise le JAVA dans le domaine du web semantique.
Je veux traiter des fichier RDF, les transformer en matrices binaires, et faire des operations logiques sur ces matrices.
Les operations logiques sont : OR, AND, XOR
Je veux trier les lignes et les colonnes des matrices.
Je veux traiter des fichier RDF, les transformer en matrices binaires, et faire des operations logiques sur ces matrices.
Les operations logiques sont : OR, AND, XOR
Je veux trier les lignes et les colonnes des matrices.
YCN-
Messages postés
116
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
13 juillet 2017
12
8 juin 2017 à 16:52
8 juin 2017 à 16:52
Dans ce cas je pense que la seule manière de faire ça ça va être d'utiliser des tableau 2D, mais je ne sais pas comment optimiser ça en java. Tu devrais peut être créer une structure personnalisé qui va te permettre de déplacer rapidement tes colonnes et tes lignes. J'avoue que je m'y connais assez mal en java...
En C je t'aurais conseillé d'utiliser des pointeurs qui t'auraient permis de ne pas perdre de temps en recopie des matrices. L'important dans ce que tu fais va être de bouger des zones mémoires, et ce sans les recopier, tu vas devoir faire des échanges "intelligents", cad penser à optimisation des registres et des variables, ne jamais recopier, ne jamais faire des calcul inutiles. Cela passe par l'optimisation de boucles notamment.
L'idée ça va être de réduire la complexité de tes boucles, à chaque fois que tu vas supprimer un read, un write, et surtout un calcul tu vas beaucoup baisser la complexité de ta boucle. Puisqu'en fait (et c'est logique) à chaque opération enlever tu vas économiser en complexité N*M opérations (pour une matrice N*M).
Puisque ce sont des matrices binaires, je te conseille de faire tes opérations par 32, puisque c'est la taille d'un int. Tu vas donc mapper ta matrice binaire dans des int.
Par exemple pour la ligne 1 : b0, b1 ... bx
tu vas la transfromer en int1 , int2...
et int1 sera composé de b0 à b32
Tu comprends l'idée?
Cependant je pense que le java est très mal adapté au optimisation de calcul. Puisque c'est un langage lent et très éloigné de l'architecture matériel par définition (puisque utilisant une machine virtuelle). Donc ce sera beaucoup de peine pour pas gagner grand chose au final.
https://fr.wikipedia.org/wiki/Optimisation_de_boucle
En C je t'aurais conseillé d'utiliser des pointeurs qui t'auraient permis de ne pas perdre de temps en recopie des matrices. L'important dans ce que tu fais va être de bouger des zones mémoires, et ce sans les recopier, tu vas devoir faire des échanges "intelligents", cad penser à optimisation des registres et des variables, ne jamais recopier, ne jamais faire des calcul inutiles. Cela passe par l'optimisation de boucles notamment.
L'idée ça va être de réduire la complexité de tes boucles, à chaque fois que tu vas supprimer un read, un write, et surtout un calcul tu vas beaucoup baisser la complexité de ta boucle. Puisqu'en fait (et c'est logique) à chaque opération enlever tu vas économiser en complexité N*M opérations (pour une matrice N*M).
Puisque ce sont des matrices binaires, je te conseille de faire tes opérations par 32, puisque c'est la taille d'un int. Tu vas donc mapper ta matrice binaire dans des int.
Par exemple pour la ligne 1 : b0, b1 ... bx
tu vas la transfromer en int1 , int2...
et int1 sera composé de b0 à b32
Tu comprends l'idée?
Cependant je pense que le java est très mal adapté au optimisation de calcul. Puisque c'est un langage lent et très éloigné de l'architecture matériel par définition (puisque utilisant une machine virtuelle). Donc ce sera beaucoup de peine pour pas gagner grand chose au final.
https://fr.wikipedia.org/wiki/Optimisation_de_boucle
En faisant des recherches, on tombe sur des articles intéressants concernant les performances des différentes Collections de Java : https://blog.engineering.publicissapient.fr/2011/02/17/java-collection-performance/
Certaines collections sont meilleurs si tu veux accéder à un élément précis indexé (arraylist) ou non indexé (map).
Certaines collections sont meilleurs si tu veux accéder à un élément précis indexé (arraylist) ou non indexé (map).