Gestor de base de datos para muchos datos

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
Debo realizar un sistema que guarde en una base de datos, datos que capta un sensor cada 1 segundo. En total, segun mis calculos, al año se generarán cerca de 2gb de datos. Se que no es mucho, pero no estoy acostumbrado a tratar con tal cantidad de datos.

Alguna recomendación? Por la cantidad de datos, descarté mysql. Me tinca posgress o mongodb funcionaría mejor en este caso.

gracias, saludos.
 

K3rnelpanic

non serviam
Miembro del Equipo
MOD
Se incorporó
1 Octubre 2007
Mensajes
6.053
Oye pero 2gb al año es un moco. :zippy
Por ejemplo. En la BCS una bd fácil pesa 65gb :naster

Enviado desde mi MotoE2 mediante Tapatalk
 
Upvote 0

K3rnelpanic

non serviam
Miembro del Equipo
MOD
Se incorporó
1 Octubre 2007
Mensajes
6.053
Postgresql hace la pega cagado de la risa.

Enviado desde mi MotoE2 mediante Tapatalk
 
Upvote 0

GORDIO

Tatita del Ritmo
Se incorporó
30 Agosto 2005
Mensajes
2.097
2 GB al año, igual es poco.
Hasta MySQL te hace la pega,
por cuantos años vas a tener el historico ???
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.784
¿Tay seguro de que la base de datos va a crecer 2 GB al año? ¿Tienes como calcular el tamaño del registro? Te lo menciono porque una de las bases de datos del transantiago, esa que registra el posicionamiento de los buses, recibía actualizaciones cada... no se... 30 segundos por bus. La cosa es que la base de datos crecía 1TB al año (así muy al ojo).

Acabo de hacer una prueba con una tabla de Oracle 11g, que tiene sólo tres campos: un entero, un alfanumérico de sólo 5 campos y uno de tipo fecha. El promedio de tamaño del registro es de 9 bytes.

Al año hay 31.536.000 segundos. Multiplicado por 9 bytes son 283.824.000 bytes. En un año son 270MB. Ahora bien, eso es en una tabla de sólo 3 campos. Si agregas campos el tamaño va subiendo, si hay otras tablas involucradas también.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.784
Update:

Si crees que tendrás una tabla muy grande, trata de buscar un software de base de datos que te permita particionar la tabla. ¿Qué cresta significa esto? Que físicamente puedes partir la tabla en varios pedazos, pero desde el punto de vista lógico no se nota. Ejemplo:

Imagínate que tienes una tabla enoooorme, con un campo de tipo fecha. Evalúas entonces "partir" la tabla por año, y creas una partición por cada año. Así, tu tabla estará particionada en el año 2010, 2011, 2012, 2013, 2014, 2015 y 2016 lo que significa que estará partida físicamente. Pero la tabla se llamará igual, desde el punto de vista de tu aplicativo esto es transparente.

¿Quñe ventaja tiene esto? Que si haces una consulta referente a una fecha del añó 2012, internamente no tendrás que revisar TOOOODA la bendita tabla, sino que el motor irá automáticamente a la partición correspondiente al año 2012 con lo que ahorrarás mucho acceso a disco. Créeme, esto mejora mucho el rendimiento, pero MUCHO.

Yo se que Oracle, MySql y Postgresql tienen esa opción. En Oracle y MySql la he probado y es la cumbia. No se en Postgresql, pero el vikingo calvo (alias @unreal4u ) se maneja en Postgres y puede darnos feedback.

Esto es una consideración de diseño. Convérsalo con la gente de tu pega. Lo mejor de todo es que como te decía, esto es transparente para la aplicación.
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.475
1 entrada por segundo? pfffff eso no es nada :) Son apenas 86400 entradas nuevas al día. Para MySQL tendrías datos suficientes para 2 años antes de siquiera tener que entrar a tunear.

Punto aparte: en las pruebas que he hecho yo con particionado no he visto un cambio radical o que me permita decir oh que bkn, pero puede ser tb mi use-case (muchas operaciones sobre todo a la última partición y el resto queda más como historial que apenas se consulta). Creo que en tu caso será más o menos igual por lo que no te servirá yo creo.

Yo te recomendaría algo así como ElasticSearch la verdad, está hecho para datamining de forma heavy pero eso si te aviso que requiere una máquina más menos potente por detrás (pero 1 inserción por segundo no es nada). Nosotros lo queríamos ocupar para analizar logs de todos los servidores en vivo y en directo lo cual produce cerca de 2000 entradas nuevas por minuto (Si es esto lo que necesitas, revisa ELK stack o busca por Kibana solamente que es con lo que tú trabajarías más que con logstash) pero el server no nos dio, claro que era una VM en un host que ya tenía harto que hacer con 1 CPU y 2GiB en RAM. Al final otros proyectos más importantes tuvieron prioridad y ahí quedó en el tintero hasta nuevo aviso.

Lo genial de ElasticSearch es que no necesitas una estructura predefinida: insertas datos como wn y luego simplemente haces consultas basadas en esos datos. Kibana por el otro lado puede ser un culo de configurar pero una vez hecho eso funciona fantástico: no hay satisfacción más grande que ver en el momento gráficos, aciertos y errores aparecer en pantalla, sin que tengas que esperar 5 minutos como con Munin.

Anyway, es lo que yo haría :)

Saludos.
 
Upvote 0
Subir