Besoin d'aide ! Je ne peux pas résoudre le problème, je me heurte à des limitations matérielles. - page 12

 
komposter:


Toute la base de données tient-elle dans 10 lakh lignes ou non ? tous les fichiers ensemble
 
Candid:

Mais les séquences sont indépendantes les unes des autres, n'est-ce pas ? Alors pourquoi ne pouvons-nous pas parcourir en boucle les dates d'une séquence à chargement unique en une seule fois ? Ici, d'ailleurs, il peut être possible de passer à un algorithme de récurrence efficace, mais cela dépend de votre chance. La taille d'un million sur un million sera conservée, et le fichier sera lu une fois.

Bien sûr, un problème où le nombre d'étapes reste le même à l'itération suivante (c'est-à-dire que la zone de recherche ne se rétrécit pas au fur et à mesure du calcul) ne semble pas très robuste. Mais ceci est subjectif, bien sûr.

La récursion sur de telles dimensions tombera lorsque la limite du cache sera dépassée.
 
Il existe de nombreuses séquences de transactions de type unique, chaque séquence étant triée par heure.

Сделки в разных последовательностях разные, по времени распределены неравномерно (и в каждой последовательности по своему). Сделок разное количество. Но все - в интервале от Даты1 до Даты2.

La tâche est de passer de D1 à D2 avec un pas de M minutes (ou mieux - exactement en points de transactions de toutes les séquences), de trouver une séquence qui est meilleure que les autres selon le critère K (une tâche séparée - pas seulement pour trouver la meilleure séquence, mais pour trier l'ensemble par critère et sortir les 10 meilleures - mais c'est une option, pas encore nécessaire).

Le critère K est calculé sur la base des X transactions précédentes de la séquence correspondante, tout en calculant presque toutes les informations sur chacune des X transactions (le seul profit, par exemple, n'est pas suffisant).

C'est là que nous aurions dû commencer.

Ai-je bien compris ce qui suit :

1) Un fichier de 20 gb est constitué d'environ un million de séquences triées par temps.

2) La taille de chaque séquence peut varier et dépend du nombre de donnes que la séquence contient.

3) La taille moyenne d'une séquence est de 20/10^6 = 20 Mb, donc que pouvons-nous garantir pour télécharger complètement une séquence ?

4) Le coefficient K ne dépend que des échanges au sein de la séquence donnée

5) Pour chaque séquence, nous devons trouver K (au total 10^6 pièces) et sélectionner les 10 premières.

A Si nous créons un autre fichier avec les valeurs des distances entre les séquences.

1) Voir combien de séquences nous pouvons télécharger et additionner la distance entre elles (en gardant les valeurs intermédiaires des sommes).

2) Nous lisons la distance du fichier en RAM

3) Exécuter pour chaque séquence l'algorithme de recherche pour trouver K (on sait où se trouve le début des séquences, car on garde les sous-totaux calculés à l'étape 1)

4) Recommencez le point 1 en avançant un peu.

Quant au top 10 :

n est la valeur totale de K, m est le nombre de meilleurs.

1) vous pouvez trouver tous les K et ensuite, au moyen de la structure de données du tas, choisir le nombre nécessaire de meilleures valeurs (Obtenir le tas O(n), choisir la meilleure valeur O(log n) nombre de fois m, espace en mémoire - n)

2) compter le nombre requis - m instances (par exemple, 10), les trier et utiliser une recherche binaire pour trouver le point d'insertion des K instances restantes.

(tri initial O(m*log m), recherche d'insertion O(log m) nombre de fois (n-m), insertion O(1), espace mémoire occupé - m).

 
Urain:
La récursion sur ces dimensions diminuera lorsque la limite du cache sera dépassée.
Dans la récursion classique, la taille du cache est fixe.
 
ALXIMIKS:

3) La taille moyenne d'une séquence est de 20/10^6 = 20 MB, quel sera le chargement complet d'une séquence que nous pouvons garantir ?

Au fait, oui, vous pouvez charger des lots de séquences en une seule fois.
 

J'ai l'impression que je n'arrive pas à saisir l'essentiel de ce qui est nécessaire et de ce qui est donné ((((

 А потом "нужная дата" сдвигается на точку закрытия сделки из выбранной последовательности и алгоритм повторяется.

et oui20/10^6 = 20kb parce que 1gb = 1000mb = 10^6kb

 
YuraZ:

Aller vers SQL


  • C'est relativement nouveau pour moi (je n'ai pas travaillé de près, juste des requêtes de base) ;

Cela peut être assez lent au stade de l'apprentissage.

Si vous choisissez cette option, il est préférable de construire toute la logique métier avec des procédures stockées.

ne laissant au conseiller expert que deux fonctions - envoyer une requête au serveur et obtenir un résultat complètement terminé.

tous les calculs sur le serveur

  • La complexité de l'installation sur une seule machine cliente (version autonome) ;

En fait, sur le web, vous pouvez trouver de nombreuses descriptions sur la façon de mettre le serveur SQL

( ORACL, SYBASE + CENTOS par exemple ) ORACL, SYBASE, MS SQL + WINDOWS machine autonome

ORACL est un peu plus compliqué à apprendre - moins d'experts, moins de littérature.

MS SQL - peut-être la plus grande quantité d'informations et plus de littérature sur le web.

il n'y aura pas de difficultés - il y a de nombreuses descriptions sur le web et plus de livres dans la boutique.

MSSQL 2012 par ses paramètres est très proche d'ORACL - déjà en 2014.

SQL + LINUX est généralement choisi pour fonctionner dans un environnement de production - si vous ne connaissez pas LINUX, il est préférable d'utiliser WINDOWS.

MSSQL Expres balloon mais les restrictions utilisent 1 core, 1Gb de mémoire, et 10Gb de base

d'autres sont payés.

 
komposter:
...

Il existe de nombreuses séquences de transactions similaires, chaque séquence étant classée par ordre chronologique.

Les transactions dans les différentes séquences sont différentes, distribuées de manière inégale dans le temps (et d'une manière différente dans chaque séquence). Le nombre de transactions est différent. Mais ils sont tous dans l'intervalle de Date1 à Date2.

La tâche - passer de D1 à D2 avec un pas de M minutes (ou mieux - spécifiquement par des points d'accords de toutes les séquences), trouver une séquence, qui est meilleure que les autres par le critère K (une tâche séparée - pas seulement trouver la meilleure séquence, mais trier l'ensemble par critère et sortir les 10 premiers - mais c'est une option, pas encore requis).

...

Je ne comprends pas où.

Il y a un critère - tous - dans l'intervalle de Date1 à Date2.

komposter:

Tout est comme ça.

Ensuite, la "bonne date" est déplacée vers le point de clôture de l'opération de la séquence sélectionnée et l'algorithme se répète.

Et ainsi de suite un million de fois =)

C'est-à-dire que le suivant est lu.

Pourquoi ne pas diviser le fichier en plusieurs intervalles , de Date1 à Date2 ? Il y aura des séquences dépensées qui pourront être fermées, non ?

 
Silent:

Je ne comprends pas où.

Voici le critère - tout se situe entre Date1 et Date2.

C'est-à-dire qu'il se lit comme suit .

Pourquoi ne pas diviser le fichier en plusieurs intervalles de la date 1 à la date 2 ? Il y aura des séquences épuisées qui pourront être fermées, non ?

Apparemment, l'un des résultats du passage d'une date unique est une nouvelle date.
 

si le problème est le suivant :

donné une rangée 1 2 3 4 5 6 7 8 9

Étant donné une largeur de 4, par exemple, vous devez utiliser cette largeur sur toute la ligne pour trouver une valeur à l'intérieur de la largeur (par exemple, un minimum) :

il faut d'abord trouver en 1 2 3 4 puis 2 3 4 5 puis 3 4 5 6 puis 4 5 6 7 puis .... etc.

alors la tâche est résolue en maintenant le minimum dans la structure de données de la file d'attente :

1) La mise en œuvre de cette méthode a été suggérée dans le cours vidéo de mails.ru par le biais de quatre structures de données en pile.

2) J'ai verbalement inventé une implémentation à travers la structure de données queue et la structure de données déc, très probablement, quelqu'un l'a déjà fait une fois et elle porte son nom, je dois juste la trouver.

Raison: