[Résolu] Capacité en nombre de lignes

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
jean-christophe
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 févr. 2007 09:54
Localisation : Paris

[Résolu] Capacité en nombre de lignes

Message par jean-christophe »

Bonjour,

Je cherche à faire migrer un fichier Excel de 40 000 lignes, qui fait régulièrement 13Mo (il n'y a pas que les fichiers d'OpenOffice qui enflent...), et qui est de plus en plus lent à ouvrir.
Il ne s'agit que de données simples (nombres, dates, O/N, ...) mais fréquemment mises à jour.

Pensez-vous qu'avec 500ko, oBase pourrait supporter ces données, voire davantage ?

J'ai lu que les bases oBase "natives" sont en fait gérées par l'outil HSQLDB (moteur HSQL, driver JDBC). Pensez-vous que pour une utilisation mono-poste, il ne vaudrait pas mieux utiliser un autre moteur, par exemple SQLite (installation driver ODBC) ?

Avez-vous des exemples de bases ayant plus de 50k lignes ?

24/01/12 : J'ai trouvé une référence sur HSQLDB où ils parlent de bases de plusieurs gigas !!
http://hsqldb.org/web/hsqlFAQ.html#FAQ

Merci pour votre aide.
Dernière modification par jean-christophe le 26 janv. 2012 13:23, modifié 2 fois.
Ubuntu "EupTouDaite".
LibreOffice "EupTouDaite" aussi (4.2.3.3 en juin 2014)
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Capacité en nombre de lignes

Message par jeanmimi »

Bonjour,
C'est moins une question de lignes (comme dans Calc) que de volumes de données.
Tout ce qui peut optimiser ce volume est à privilégier. Par exemple, stocker les id plutôt que des données textes redondantes, stocker les liens vers les images plutôt que les images elle-mêmes (nombreux exemples dans le forum de bases ayant "éclaté en plein vol" après l’enregistrement d'une dizaine de photos de 1 Mo chacune)
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
jean-christophe
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 févr. 2007 09:54
Localisation : Paris

Re: Capacité en nombre de lignes

Message par jean-christophe »

Bonjour,

Supposons qu'il s'agisse d'une base simple, alphanumérique, et relativement bien construite (ID en entier, Liens en texte, ...) mais avec plus de 50k lignes.
Cela tient à votre avis ?
Et côté performances ?

Je voudrais bien faire un test en liant une base HSQL à Calc pour injecter des lignes et voir jusqu'où on peut aller sans que cela pose problème... Par contre, je n'arrive toujours pas à lier la base à Calc et faire en sorte que les modifications dans Calc soient reportés dans la base... mpffff :fou:
Ubuntu "EupTouDaite".
LibreOffice "EupTouDaite" aussi (4.2.3.3 en juin 2014)
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Capacité en nombre de lignes

Message par jeanmimi »

Nous avons eu dans le forum des demandes de connexion, ou de transferts de contenus, de Calc dans Base qui ont porté sur des centaines de lignes.
Comme Base charge toutes les données en mémoire, les limites seront atteintes par les capacités du PC et, comme écrit plus haut, par la stabilité des données.
Quant à la question sur l'actualisation depuis Calc, elle est traitée dans cette FAQ : http://wiki.services.openoffice.org/wik ... Q/Base/019
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
jean-christophe
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 févr. 2007 09:54
Localisation : Paris

Re: Capacité en nombre de lignes

Message par jean-christophe »

Re-bonjour,

Je viens de faire un test avec le driver SQLite3 (via ODBC).

Insertion de 48k lignes à partir d'un fichier Calc sous la forme :
NOM PRENOM NAISSANCEDATE NAISSANCELIEU
DUPONT PIERRE 12/02/77 BEAUVAIS
DURAND PAUL 13/02/77 LYON
... ... ...

Export SQL vers le fichier SQLlite (référencé dans "Nouvelle base de données4") : 10 minutes (attention, il faut exécuter la directive PRAGMA SYNCHRONOUS = OFF sinon à chaque insert, le fichier SQLite sera ouvert/fermé ce qui ralentit BEAUCOUP le transfert...).
 Ajout : -> créer une requête dans le fichier odb "PRAGMA SYNCHRONOUS = OFF" à activer à chaque import 
Poids du fichier SQLlite : 1,9 Mo
Taille du fichier odb : 11 ko (hi hi hi)
Import du fichier SQLlite vers Calc (via F4, drag/drop de la table) : 2 minutes

Donc c'est possible pour du "gros" volume.

Pas fait le test avec HSQLDB du fait des instruction SQL qui fonctionnaient mal...

Code : Tout sélectionner

REM  *****  BASIC  *****
' SOURCES : 

Sub Main
	sBaseName = "Nouvelle base de données4" 'TEXT, TEXT, DATE, TEXT
	' "Nouvelle base de données4" -> SQLite
	oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
	If ( oBaseContext.hasByName(sBaseName) = false ) Then
		MsgBox("La base de données n'est pas enregistrée dans oBase", 16)
		Exit Sub
	Else
		oDataSource = oBaseContext.getByName(sBaseName)
		oConnection = oDataSource.getConnection("", "")
		If ( oConnection.Tables.hasByName("Table1") = false ) Then
			MsgBox("Table1 non créée dans la base de test", 16)
			Exit Sub
		End If

		oStatement = oConnection.createStatement()
		sQuery = "DELETE FROM " & Chr(34) & "Table1" & Chr(34)
		oResultSet = oStatement.executeUpdate(sQuery)
		
		oStatement = oConnection.createStatement()
		sQuery = "PRAGMA SYNCHONOUS = OFF"
		oResultSet = oStatement.executeUpdate(sQuery)
		
		' prendre la feuille active du classeur
		oSheet = thisComponent.CurrentController.getActiveSheet()
				
		flag_continue = true
		iIndexLine = 0 'index de ligne dans la feuille
		sTextNom = ""
		While (flag_continue = true)
			sTextNom = oSheet.getCellByPosition(0, iIndexLine).String
			If (sTextNom <> "") Then
				sTextPrenom = oSheet.getCellByPosition(1, iIndexLine).String
				sTextDate 	= oSheet.getCellByPosition(2, iIndexLine).String
				sTextLieu	= oSheet.getCellByPosition(3, iIndexLine).String
				
				sQuery = "INSERT INTO " & Chr(34) & "Table1" & Chr(34) & " (" & Chr(34) & "NOM" & Chr(34) & "," & Chr(34) & "PRENOM" & Chr(34) & "," & Chr(34) & "NAISSANCEDATE" & Chr(34) & "," & Chr(34) & "NAISSANCELIEU" & Chr(34) & ")" &_
						" VALUES (" & Chr(34) & sTextNom & Chr(34) & "," & Chr(34) & sTextPrenom & Chr(34) & "," & Chr(39) & sTextDate & Chr(39) & "," & Chr(34) & sTextLieu & Chr(34) & ")"

				oStatement = oConnection.createStatement()
				oResultSet = oStatement.executeUpdate(sQuery)
				
				iIndexLine = iIndexLine + 1
			Else
				flag_continue = false
			End If		
		Wend	
		oConnection.Close
   		oConnection.Dispose
	End If
End Sub
Dernière modification par jean-christophe le 25 janv. 2012 08:14, modifié 1 fois.
Ubuntu "EupTouDaite".
LibreOffice "EupTouDaite" aussi (4.2.3.3 en juin 2014)
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12236
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: Capacité en nombre de lignes

Message par Bidouille »

Bonjour,

Je rappelle que cette section n'est pas consacrée aux macros (voir le bandeau rouge en haut de la page). Si vous avez à poursuivre dans cette voie, merci de poster au bon endroit. Ceci dans un but de recherche efficace de l'information dans ce forum.

Si vous postez une solution, faites le en section "Macros et API" et ajoutez dans ce fil un lien vers celle-ci.
jean-christophe
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 févr. 2007 09:54
Localisation : Paris

Re: Capacité en nombre de lignes

Message par jean-christophe »

Le but de ce sujet est de tester les bases mono-poste à "moyen" volume (c-à-d pour moi, de 20k à 100k lignes alphanumériques). Le macro SQL n'est là que pour générer un fichier exemple.

Voici quelques mesures de performance :

- Nombre lignes : 48 704, 7 Minutes d'import SQL INSERT, 1 944 ko (fichier SQLite), navigation fluide des données dans les formulaires du fichier oBase (5/5)
- Nombre lignes : 64 582, 9 Minutes d'import SQL INSERT, 2 586 ko (fichier SQLite), navigation fluide des données dans les formulaires du fichier oBase (5/5)
- Nombre lignes : 129 164, 17 Minutes d'import SQL INSERT, 5 195 ko (fichier SQLite), navigation fluide des données dans les formulaires du fichier oBase (4,5/5)

Dans le dernier cas, je n'ai pas pu réimporter la base dans un fichier Calc du fait de la limite atteinte (j'avais fait le transfert SQL en deux fois...). Le ré-import de la base dans Calc prend de 3 à 5 minutes.
Dernière modification par jean-christophe le 25 janv. 2012 08:14, modifié 4 fois.
Ubuntu "EupTouDaite".
LibreOffice "EupTouDaite" aussi (4.2.3.3 en juin 2014)
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Capacité en nombre de lignes

Message par jeanmimi »

Tu es un chef jean-christophe !
Dans l'exemple que j'évoquais plus tôt, nous étions allés jusqu'à 1500 lignes d'un tarif
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25197
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Capacité en nombre de lignes

Message par Dude »

Salut,

Oui mais tu ne fais que tester les performances d'une base externe (SQLite).
jean-christophe a écrit :Poids du fichier SQLlite : 1,9 Mo
Taille du fichier odb : 11 ko (hi hi hi)
Ici, Base ne sert que de connecteur. Il est donc normal que le poids de l'ODB soit si faible.
jean-christophe
Membre hOOnoraire
Membre hOOnoraire
Messages : 101
Inscription : 12 févr. 2007 09:54
Localisation : Paris

Re: Capacité en nombre de lignes

Message par jean-christophe »

J'ai essayé de faire l'essai hier avec la base native HSQLDB... ça pédale dur arrivé aux 30k :aie: ...

Je pense que pour une base mono-poste de moyenne taille (60-100k lignes alphanum), SQLite est un meilleur choix que HSQLDB. Par contre, je viens de lire les comparatifs entre les deux moteurs, et en matière de types de données, SQLite est plus limité (INTEGER, REAL, TEXT, BLOB) par rapport à HSQL ; pour les dates, il faut utiliser les fonctions de conversion en entier.
 Ajout : Ha ha !!!! : SQLite to become the LibreOffice Base default -> http://user.services.openoffice.org/en/ ... 13&t=40525 ...ce n'est peut être qu'une annonce... 
Ubuntu "EupTouDaite".
LibreOffice "EupTouDaite" aussi (4.2.3.3 en juin 2014)
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Capacité en nombre de lignes

Message par jeanmimi »

Ce que je retiens du lien, c'est qu'il n'y a pas de développeur qui s'implique sur Base ... et je pense que c'est chronique.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox