Inserción y actualización masiva de datos de un servidor db a otro servidor db




 Tengo un conjunto de tablas que tiene 20 millones de registros en un servidor de Postgres. A partir de ahora, estoy migrando algunos datos de la tabla de un servidor a otro mediante el uso de consultas de inserción y actualización con tablas dependientes en las funciones. Se tarda alrededor de 2 horas, incluso después de optimizar la consulta. Necesito una solución para migrar los datos más rápido usando mongodb o cassandra. ¿Cómo?
Intente colocar sus actualizaciones e inserciones en un archivo y luego cargar el archivo. Entiendo que Postgresql optimizará la carga del contenido del archivo. Siempre me ha funcionado aunque no he usado esa cantidad.
y apoyando mas la aportacion de made in china... te dejo este enlace:  
  
<http://www.elguille.info>  
  
me imagino que vas a modificar base de datos verdad?  
  
en realidad no es tan dificil... te lo comento muy general  
  
- creas las tablas con access y las pones en la pc que hara la de servidor.  
- realizas tu aplicacion normal, como si fueras a trabajar local(en una sola maquina). solo ten el cuidado de manejar alias, es decir... direcciona la base de datos con alias.  
- luego instala la aplicacion en todas las pc que te van a utilizar el sistema  
- mapea la tabla que esta el servidor  
- conecta en todas las pc la unidad de red(direccionada a la unidad mapeada)  
- crea el alias en las maquinas que van a usar el sistema  
  
listo..  
  
precauciones que debes de tomar:  
- integridad referencial(si es necesaria)   
- otorgar permisos de escritura a la tabla  
- tomar en cuenta el bloque de registros y el bloqueo de tablas.  
  
si lo que quieres es comunicar 2 pc por el puerto de red(cliente-servidor) entonces lee todo lo que puedas sobre el winsock.  
  
saludos.... ![wink](/ckeditor/plugins/smiley/images/icon_wink.gif) sigue valorando las respuestas Los datawindows solo pueden actualizar 1 tabla a la vez. Por más que tengas varias tablas relacionadas solo podrás actualizar una de ellas.  
Ahora para hacer lo que deseas tendras que recorrer tu dw  y usar un insert o update si fuera el caso. o directamente un insert. Tienes que usar la función BUSCARV para que en función de un valor busques en la primera columna de tu otra tabla, e indicándole el número de columna consigas el dato deseado.

Otra opción es usar las funciones INDICE e COINCIDIR.

En Internet y Youtube hay muchos tutoriales, el propio Excel tiene también ejemplos.

Desafortunadamente con la información que proporcionas no veo como orientarte de manera más específica. -importar contacto:

aviso y aviso y andie me lee.....e avisado siemrpe que el importar contactos de un msn a otro noe s seguro....la razon:
no importas todos es decir,pierdes muchos por el camino y a otros no les llega las invitaciones o solicitudes de agregar.siempre e dicho y dire,que aunq cueste mucho mas trabajo agregarlos uno a uno es mas seguro y los tendras a todos..y otra manera que siemrpe e dicho es..a traves de email ya que cada eamil puedes mandarseloa 50 contactos a la vez,mandas el email con tu direccion nueva y que ellos te agureguen.. :) OK. De movida te comento que no será sencillo, pero podemos resolvvero por aproximaciones sucesivas.  
Como me están faltando datos respecto al diseño de tu hoja. Supongo que la base de datos tiene cantidades irregulares de registros para cada persona, pero seguramente puedes saber cuantos tiene el de mayor cantidad de líneas. Asumo, además, que la base está ordenada por ID.  
Una combinación de las funciones INDICE y COINCIDIR funcionan en forma similar al BUSCARV. Pero en el caso que planteas -creo- sería la solución a tu problema.   
Vale decir que, si la función COINCIDIR encuentra el valor buscado (ID) en la primer columna traerá los datos en cada línea de acuerdo a la fila donde la fórmula se encuentre.   
Tal fórmula sería como esta:   
=INDICE(Hoja2!$C$5:$G$20;COINCIDIR($I$5;Hoja2!$C$5:$C$20;0)+FILA()-FILA($I$5);COLUMNA()-COLUMNA($I$5)+1)   
[Considera si sueles usar comas o punto y coma para separar argumentos de las funciones. Yo usé ";"]  
Está fórmula copiada en las celdas inferiores traerá los datos como quieres, pero adolece de un problema, necesitas saber de antemano cuántos registros tienes para el que estas buscando y contar con una cantidad igual de líneas de fórmulas de búsqueda.   
Para evitar ese problema, la siguiente fórmula agrega un control:   
=SI($I$5=INDICE(Hoja2!$C$5:$G$20;COINCIDIR($I$5;Hoja2!$C$5:$C$20;0)+FILA()-FILA($I$5);1);INDICE(Hoja2!$C$5:$G$20;COINCIDIR($I$5;Hoja2!$C$5:$C$20;0)+FILA()-FILA($I$5);COLUMNA()-COLUMNA($I$5)+1);"")   
INDICE muestra un dato de una matriz (C5:G20 de la hoja2) de acuerdo a las coordenadas de fila y columna que se le indique como argumentos.   
Para obtener la coordenada Fila usamos la función COINCIDIR en un rango (C5:C20 de Hoja2) de la misma altura (misma cantidad y ubicación de las líneas) que la base de búsqueda. Al número de fila así obtenido le agregará tantas líneas como diferencia halla entre la fila donde está la fórmula y la fila donde está el dato a buscar. Así, si la fórmula estuviera en la misma fila que el dato, tal diferencia será cero y, por lo tanto, traerá el dato de la misma fila.   
Al copiar esta celda y pegarla en la fila inferior, la diferencia será 1, por lo tanto traerá el valor de la fila siguiente de la base original. Y así sucesivamente.   
De igual modo, para identificar de qué columna traer el dato, restará la columna actual menos la primera.   
De esta manera, la misma fórmula copiada al resto del rango donde debe traer los valores servirá al propósito sin tener que modificarla.   
Aquí vale aclarar que, si no quieres todas las columnas, puedes especificarle exactamente qué columna necesitas, reemplazando la expresión COLUMNA()-COLUMNA($I$5)+1) por el número de la columna a mostrar  
El control que le agregué, verifica que en cualquier fila que se esté buscando se trate de la misma persona que se buscó originalmente.   
Lo único que tendrás que tener en cuenta es tener una cantidad de lineas de esta fórmula de búsqueda igual al mayor número de registros que pueda tener una persona.   
Por ejemplo, supongamos que buscar los datos de los hijos de cada empleado. Si hubiera un fecundo con 10 hijos, tendrás que tener 10 filas con aquella fórmula que te sugerí. Para los que tengan menos de 10, las celdas excedentes no mostrarán nada. Pero si hubiera uno con once o doce, sólo mostrará hasta el décimo.   
Por último, si -eventualmente- necesitaras otro set de estas fórmulas para buscar otro código en otro rango de la hoja "Datos" necesitarás, primero quitarle la referencia absoluta a la celda donde está e primer código (I5).   
Nota que, apropósitamente, todas las referencias a la linea del código dicen $I$5 de forma tal que siempre lean esa celda a cada uno de sus efectos.   
Lo que suelo hacer, entonces, es seleccionar todo el rango de fórmulas (4 columnas por 8 filas) y hago "Edición" | "Reemplazar..." En la casilla Buscar: coloco $I$5 y en la de reemplazar con escribo I5. Finalmente presiono "Reemplazar todo"   
Si bien todas las fórmulas modificadas siguen "apuntando" a la celda I5, esta es ahora una referencia relativa a tal celda. Esto permite que al copiarlas a otro rango lean una posición distinta a I5.   
Por ejemplo, si tu otro código a buscar estuviera en la celda I14 y copias este set de fórmulas a partir de esa misma fila, todas leerán los datos de la celda I14.   
Lo dicho: No es una tarea simple, pero si sigues cuidadosamente las instrucciones, llegarás al objetivo.  
- Ingresa al sitio www.porloschicos.com y, si quieres,   
presiona el botón de donación (es gratis).   
Confío en que lo harás. Tenés varias ocpciones, pero la mejor, sin duda es ésta:  
Instalate el software (misma versión) en el nuevo servidor.  
Hacé el setup como si fuese un server nuevo pero con exactamente los mismos nombres que el anterior (no solo nombre del server, sino, nombre de la organización y del dominio, como así también del administrador.  
Luego de hacer esto, hace una copia de todos los archivos contenidos en el direcotrio Data y sus subdirectorios.(Del servidor viejo al servidor nuevo)  
Asegurate de que se encentre copiado el archivo server. Id (o como se llame) y el cert. Id, si es que lo tenés en el server Si te explicas, el problema es que la función se tendría que aplicar a cada ciertos rangos y dependiendo de los datos en las celdas se podrá o no sumar.  
No entiendo por qué pones datos en esta forma, lo siento un poco desordenado. Para cuestiones de análisis es mejor que los datos estén continuos. Si lo que tienes son grupos de datos puedes utilizar la función =Sumar. Si() o =Contar. Si().  
Cualquier cosa me mandas un ejemplo de tu archivo y trato de orientarte. Recibí una respuesta de Brice Lambson que trabaja en el equipo central de EF: 


>  Vas en la dirección correcta: abre las conexiones menos. Recuerde, las conexiones SQLite son esencialmente secuencias de archivos, por lo que mantenerlas abiertas por más tiempo no es realmente un problema. 
> 
>  **Si solo hay una instancia de DbContext por conexión, DbContext aún puede ser propietario de la conexión, incluso si se crea externamente. Simplemente disponga la conexión dentro de DbContext.Dispose ().** 
> 
>  Si eso no es suficiente, puede intentar crear un grupo de conexiones. La gestión de la vida puede ser difícil. Lo importante es que una conexión no se usa fuera del hilo en el que se creó. 
> 
>  El uso de Cache = Shared (es decir, [Shared-Cache Mode](https://www.sqlite.org/sharedcache.html) ) también puede ayudar al rendimiento. 
> 
> Entonces, después de 30 minutos adicionales de búsqueda sobre las 2 horas iniciales, he encontrado esta respuesta: 

 [Agregar función de importación no está disponible para la función](https://stackoverflow.com/questions/11191254/add-function-import-not-available-for-function) 

 Además de esto: 

 [Entidad marco de la función escalar](https://stackoverflow.com/a/12393291/1974352) Si, si que podrás.   
ASP permite la conexión con bases de datos siempre y cuando estas tengan un driver ODBC, que access tiene en el sistema por defecto, así que podrás hacer cnsultas SQL a la base de datos, y si no me equivoco también a los ficheros Excel. Lo que te recomiendo es que te pases por [http://msdn.microsoft.com](https://msdn.microsoft.com/) y busques toda la información allí pues es donde mejor te pueden informar  
En cuanto a saber más de asp tienes   
[http://www.aspin.com](http://www.aspin.com/)  
A la base de datos puedes acceder o bien sabiendo el path o mediante un DSN que puedes asignarle a la base de datos en el sistema. Este ultimo es el método más cómodo.  
Si, puedes probarlo en un ordenador local ya sea windows ME, 9X o 2000, pues todos tienen su servidor web así como el interprete de ASP en el sistema.  
Espero haberte ayudado,  
un saludo.