Java - Problema Muy Grande! BDatos!

 
Vista:

Problema Muy Grande! BDatos!

Publicado por Numan Medina (13 intervenciones) el 06/07/2010 03:52:12
Buenas Muchachos!... soy un programador intermedio pero lo que me sucedio no lo he podido solucionar... tengo ke hacer una aplicacion que gestione una base de datos... es muy sencillo en realidad solo unos formularios unos insert's, update's y delet's y listo... pero el detalle es que la base de datos es un archivo .TXT que pesa 3.1 GB!!! hay unos 23 o 24 millones de registros y nose como manejarlos de manera ke sea mas eficiente a la hora de dar una consulta... el manejador de base de datos que estoy utilizando es MySql con SqlManager for MySql... logro meterle 40 mgb (que son unos 150 mil registros) pero cuando paso a los 50 mgb crash.. se parte en 2 el disco duro y me dice ke no tiene espacio T_T.... nose que hacer T_T algun tips que me puedan dar? Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema Muy Grande! BDatos!

Publicado por mayrita (163 intervenciones) el 06/07/2010 05:14:58
weno talvez la ram se carga mucho y truena
lo que puedes hacer es que lo que lees lo insertas y lo borras del archivo asi si truena continuas desde donde te qeudaste
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema Muy Grande! BDatos!

Publicado por Numan Medina (13 intervenciones) el 06/07/2010 16:15:13
se lo que me kieres decir... esta bien... lo que pasa es que yo parto el archivo en 100 partes iguales de 30 Mgb... yo cargo en la BD 1 archivo de 30 Mgb a la base de datos y funciona muy bien con 120-130 mil registros busca rapido pero el detalle esta que cuando le meto el 2do archivo de 30 mgb para que sean 60 mgb en total se tira 3 en una consulta y se tarda demasiado como unos 30-50 segundos. Ok lo busca pero cuando le meto el tercer archivo de 30 mgb para que sean los 90 mgb me dice lo del disco que no tengo suficiente espacio y tengo libre 30 GB y en memoria 1 gb... eso lo hago desde el gestor de base de datos hay no meto nada del programa..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema Muy Grande! BDatos!

Publicado por ery (10 intervenciones) el 12/07/2010 03:44:05
Por favor detalla un poco mas para poder ayudarte,

1) Windows o Linux
2) Tipo de particion donde se encuentra el directorio de datos de MySQL
3) El Formato de la tabla es MyISAM o InnoDB
4) Puedes publicar el my.cnf
5) Puedes publicar el struct de la tabla en cuestion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema Muy Grande! BDatos!

Publicado por Numan Medina (13 intervenciones) el 12/07/2010 17:53:16
1.- Windows (7)
2.- NTFS C:/
3.- InnoDB
4.-
[client]
port=3306
[mysql]
default-character-set=latin1
# SERVER SECTION
[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
default-character-set=latin1
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=0
table_cache=256
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
#*** INNODB Specific options ***
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8

5.-
c= caracter
n=numerico

campo tipo tamaño

letra cedula c 1
numero cedula n 8
apellidos y nombres c 143
codif vieja cv n 5
codif nueva cv n 9
nombre cv c 255
direccion cv c 255
cod estado n 2
estado c 30
cod municipio n 2
municipio c 30
cod parroquia n 2
parroquia c 30

necesitas otra cosa? T_T Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema Muy Grande! BDatos!

Publicado por ery (10 intervenciones) el 14/07/2010 18:19:01
Hola en forma rapida te faltaron los indices, ahora entiendo que tienes un select que esta lento,

haz esto

show index from tu_tabla (muestra los indices) o show create table tu_tabla (obtienes la estructura con los indices)

luego revisa los campos de filtro (where) de tus select para ver se encuentran bien definido los indices,

puedes hacer esto

explain y_tu_select (para que te informe por cual indice y campos utiliza el procesador de consulta) de hay podemos ver si forzamos al select a usar otro indice (normalmente esto no se usa por que casi siempre el procesador lo hace eficientemenet)

Si todo eso todavia esta bien puedes aumentar el innodb_buffer_pool_size para agilizar las cosas en primera instancia, tambien hay otros parametros interesante como el sort_buffer_size en caso que tengas un conjunto de resultado muy grande y no este ordenado por un indice.

Muchas veces es recomendable usar la opcion LIMIT para paginar los resultados

Avisame como te va para ver que mas hacemos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema Muy Grande! BDatos!

Publicado por Numan Medina (13 intervenciones) el 20/07/2010 00:59:32
Epa! ya he encontrado algunas soluciones... en primera instancia normalice mi tabla mayor y la dividi en 5 tablas las cuales son Personas, Centros de Votacion, Estado, Municipio y Parroquia...

me trabaja de maravilla logre ingresarle 650mil registros y andava como dios manda... pero me encontre con un problema.. los 650 mil registros son de un solo estado.. el detalle esta que cuando voy a ingresar personas de otro estado los codigos de parroquia y municipio se van a 1 por ejemplo Estado Zulia llega a 234 parroquias en 23 municipios cuando voy a ingresar personas del siguiente estado los codigos de parroquia que deberia incrementarse uno mas seria el 235 en adelante me los pasa para 1 de nuevo y el detalle esta de que en municipio y parroquia las claves primarias son los codigos de parroquias y municipio T_T.

Pregunta.

debo agregarle otro valor a la tabla que sea autoincrement hacerla primaria y el codigo de municipio y parroquia lo coloco normal para que se pueda repetir?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema Muy Grande! BDatos!

Publicado por ery (10 intervenciones) el 20/07/2010 19:18:02
La respuesta esta aqui http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html

Tienes 2 escenarios

1) Tienes un Primary Key (auto_increment) definido este es clustered, el Unique Key es igual a cualquier otro Key pero no acepta duplicado

2) Si no tienes un Primary Key el Unique Key se convierte en un indice clustered

Los indices clustered son mas rapido, pero cuando no son incrementales los insert o update que cambien la posicion dentro del indice pueden ser lentos

Una cosa a evaluar lo indices son evaluados de izquierda a derecha Ejemplo

Indice (Fecha, Rif, Cedula) y la busqueda es por Where Cedula = "V-12323" and Rif = "J-0202020" no va a utilizar un indice, pero el orden de los campos no influyen, es la forma de creacion del indice, (Rif, Cedula, Fecha) si lo utilizaria

Revisa los select con explain
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar