Autor Tema: Bases de Datos en Memoria en VB 6  (Leído 4049 veces)

0 Usuarios y 1 Visitante están viendo este tema.

wolf_kof

  • Visitante
Bases de Datos en Memoria en VB 6
« en: Julio 13, 2011, 01:23:48 am »
No es que alla inventado el agua azucarada o algo así!!! pero descubri por mi mismo "dijo el indito de mi tierra", que se pueden abrir las bases de datos en un modulo aparte y solamente utilizarlas y regrescarlas algo así

Código: (vb) [Seleccionar]
Option Explicit

Global Const WM_LBUTTONUP = &H202
Global Const WM_SYSCOMMAND = &H112
Global Const SC_MOVE = &HF010
Global Const MOUSE_MOVE = &HF012

Public Usuario As String
Public Usemana As String
Public Uperiodo As String
Public Umes As String

#If Win32 Then
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
#Else
    Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
#End If


Global BD As New ADODB.Connection
Global ciclo As New ADODB.Recordset
Global usuarios As New ADODB.Recordset
Global Fincas As New ADODB.Recordset
Global EPMensual As New ADODB.Recordset
Global EPPeriodo As New ADODB.Recordset
Global EPSemanal As New ADODB.Recordset
Global semanas As New ADODB.Recordset
Global AvanceF As New ADODB.Recordset

Sub Main()
abrir
frmLogin.Show
End Sub

Sub abrir()
BD.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\PPA\BD\Produccion.accdb;Persist Security Info=False"
ciclo.Open "ciclo", BD, adOpenDynamic, adLockOptimistic
usuarios.Open "usuarios", BD, adOpenDynamic, adLockOptimistic
Fincas.Open "Fincas where ciclo = '" & ciclo!ciclo & "' order by distrito desc, sector desc, locacion desc", BD, adOpenDynamic, adLockOptimistic
EPMensual.Open "EstadisticaProduccionMensual where ciclo = '" & ciclo!ciclo & "'", BD, adOpenDynamic, adLockOptimistic
EPPeriodo.Open "EstadisticaProduccionPeriodos where ciclo = '" & ciclo!ciclo & "'", BD, adOpenDynamic, adLockOptimistic
EPSemanal.Open "EstadisticaProduccionSemanal where ciclo = '" & ciclo!ciclo & "'", BD, adOpenDynamic, adLockOptimistic
semanas.Open "semanas", BD, adOpenDynamic, adLockOptimistic
AvanceF.Open "AvanceFrutaFinca", BD, adOpenDynamic, adLockOptimistic
End Sub

Sub cerrar()
ciclo.Close
Set ciclo = Nothing
usuarios.Close
Set usuarios = Nothing
Fincas.Close
Set Fincas = Nothing
EPMensual.Close
Set EPMensual = Nothing
EPPeriodo.Close
Set EPPeriodo = Nothing
EPSemanal.Close
Set EPSemanal = Nothing
semanas.Close
Set semanas = Nothing
AvanceF.Close
Set AvanceF = Nothing

BD.Close
Set BD = Nothing
End Sub


Pero necesito que me saquen de algúnas dudas!!!

  • Es Seguro trabajar de esta forma? "Por la cantidad de memoria que consume el equipo"
  • Que tan seguro serán los calculos al momento de utilizar las BD en memoria?
  • Que tan rapido y confiable es este metodo a comparación de abrir y cerrar las bases de datos por formulario!!?
  • Que tantos datos puedo manejar a la vez?
  • Que tantas tablas puedo abrir al mismo tiempo?

Bueno espero que me respondan por que necesito de su ayuda!!! Grax (Hace rato no preguntaba nada)

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Bases de Datos en Memoria en VB 6
« Respuesta #1 en: Julio 13, 2011, 04:53:35 am »
Que tal doctor, que bueno que te animaste. Espero que los reconocidos conocedores de BDs nos comenten, yo también tengo dudas sobre esto y en algun momento cercano hare algunas pruebas, aquí mis especulaciones:

1.- Es Seguro trabajar de esta forma? "Por la cantidad de memoria que consume el equipo"
No lo veo seguro, Concluyo que las ventajas que pueda tener se ven desfavorecidas por las desventajas, por ejemplo, el que la ram tenga que ser compartida por otros programas ajenos, el que necesitemos usar triggers y SPs, corte de fluido, etc.

2.- Que tan seguro serán los cálculos al momento de utilizar las BD en memoria?
mmm, creo que para operaciones complejas y bastante fraccionarias habría algún problemilla, por lo que lei, los números obtenidos de operaciones consecutivas y fraccionarias no son las mismas siempre pero en su parte 20ava decimal o mas, innecesario para operaciones comerciales, en todo caso, la ram es un componente electrónico muy delicado y esta diseñada como memoria de transito.

3.- Que tan rapido y confiable es este metodo a comparación de abrir y cerrar las bases de datos por formulario!!?
Creo que es mas rapido porque no accedes al disco duro, pero sera mas rapido solo para lectura, porque para escritura lo que escribes en la RAM si o si se escribirá en disco, por tanto toma el mismo tiempo + la actualización de la ram, asi que la unica ventaja que veo es sobre la lectura. Mi duda esta en el asunto de una BD sobre un server a la que acceden varias PCs, por algún mecanismo (consulta continua) se tiene que "refrescar" esa RAM, quizá para un único terminal sea admisible.
El otro punto a aclarar, es que la BD no la abres y cierras por formulario, la abres una sola vez (en un modulo) y la cierras cuando muere la aplicación.

4.- Que tantos datos puedo manejar a la vez?
Dependerá de lo que "sobre" de ram, de la cantidad de tablas que leas, de la cantidad de campos, de lo compleja que sean las consultas y sobre todo de cuantos registros hablamos, no es lo mismo leer una tabla de 1000 registros a una de 1 millon de registros.

5.- Que tantas tablas puedo abrir al mismo tiempo?
Supongo que todas las que te admita lo que te sobre de RAM. Salvo que exista algún mecanismo o software que me permita reservar una cantidad de RAM solo para las tablas que cargue.

Concluyendo: veo interesante el tema, lo aplicaría para hacer Dashboard probablemente, o si hiciera algun juego donde obtenga todos los datos de la BD y las cargue a memoria, veo viable este tema solo si se trabaja en una sola PC (supongo) y si la carga de registros es poca, igual me interesa hacer algunos test.

Saludos.
Me encuentras en YAcosta.com

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Bases de Datos en Memoria en VB 6
« Respuesta #2 en: Julio 13, 2011, 10:55:27 am »
te lo digo en pocas palabras: seria un desastre que alguien use eso.

PD:ya voy a publicar el ejemplo que prometi de ADO , vas a ver lo sencillo que es.

ssccaann43

  • Moderador
  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Bases de Datos en Memoria en VB 6
« Respuesta #3 en: Julio 13, 2011, 10:57:25 am »
te lo digo en pocas palabras: seria un desastre que alguien use eso.

PD:ya voy a publicar el ejemplo que prometi de ADO , vas a ver lo sencillo que es.

+2 Definitivamente...!
Miguel Núñez.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Bases de Datos en Memoria en VB 6
« Respuesta #4 en: Julio 13, 2011, 04:12:41 pm »
te lo digo en pocas palabras: seria un desastre que alguien use eso.

PD:ya voy a publicar el ejemplo que prometi de ADO , vas a ver lo sencillo que es.

Jeje, me ahorraste la chamba de probarlo, a eso era a lo que me referia, saber con definitiva si procede o no.
Entiendo que Abner quería mostrar lo rápido que es esa forma (la BD leerla de RAM vs leer de Disco), pero creo que no considero los otros factores que son igual o mas importantes que la velocidad y la velocidad de muy poca data no es nada diferente a la velocidad que tenemos usualmente.
Me encuentras en YAcosta.com

wolf_kof

  • Visitante
Re:Bases de Datos en Memoria en VB 6
« Respuesta #5 en: Julio 15, 2011, 10:42:40 pm »
Muchas gracias, aunque les cuento que acabo de hacer la prueba en MySQL y 180,000 registros y todo marcha de maravilla por lo tanto no les entiendo, ya que hago procedimientos y me va muy bien!!! aunque dije los argumentos que ud me dijeron.... pero quisiera profundisar un poquito mas en el tema.