Parece que hay algunas cosas que pueden hacer que una base de datos Access crezca excesivamente.
-
El bloqueo de filas se trata en esta pregunta de Stackexchange: La base de datos MS-Access se hace muy grande durante las inserciones
Parece que la solución sugerida es desactivar Row-Locking
en la base de datos. Esto es algo que se desactiva en la propia base de datos Access, no a través de ArcGIS. Dicho esto, no estoy seguro de qué efectos, positivos o negativos, esto puede tener en relación con la interacción de ESRI. Una búsqueda rápida no apareció nada, por lo que no podría hacer daño a probarlo.
-
Este artículo técnico de Microsoft trata de Cómo prevenir el Bloat después de usar Data Access Objects(DAO). No estoy seguro del tipo de interfaz que utiliza ESRI para enlazar con la consulta de la base de datos Access y otras operaciones, pero imagino que también estarán relacionadas con esto.
Creo que estos abordan bastante bien el problema del tamaño. En el tiempo que llevo usando PGDB y bases de datos Access en general, he visto mucha fluctuación de tamaño. También ha habido algo que creció mucho mientras que los datos que contenían no parecían soportarlo. No parece que haya mucho que puedas hacer aparte de lo que estos artículos pueden ayudar.
Ahora, en la parte de su pregunta que tiene muchas más posibilidades, y preguntas.
En realidad, está haciendo dos preguntas diferentes.
- ¿Debería aprender más SQL?
- ¿Debería aprender a utilizar un RDBMS basado en servidor como PostgreSQL?
Pregunta nº 1 - Yo diría definitivamente que sí. Esto se aplicaría independientemente de cómo enfoques la pregunta número 2. Incluso si sigues usando Python y un GDB Personal, podrías empezar a mover algunas de tus operaciones de código Python a consultas SQL y pasarlas. Puedes hacer esto usando Arcpy como lo haces ahora, o en combinación con un módulo como pyodbc que le permite interactuar con cualquier número de formatos de bases de datos. Como dices en tu pregunta, aprender SQL te da la capacidad de realizar operaciones de forma mucho más eficiente.
Pregunta nº 2 - Esto, obviamente, también va a salir del lado del "Sí". Es más fácil dar ejemplos concretos de por qué aprender un RDBMS te beneficiará.
He aquí algunas:
- El proceso de instalación y configuración de un verdadero RDBMS como PostgreSQL le obliga a familiarizarse con sus datos y cómo están estructurados. Hay tantos más controles potenciales sobre quién tiene acceso, y sobre lo que está permitido, que usted necesita poner un poco de pensamiento en sus datos cuando se configura por primera vez, ya que puede ser mucho más difícil de cambiar más tarde.
- El hecho de que un RDBMS sea ÁCIDO -es una red de seguridad enorme y yo diría que relativamente oculta, al menos para el usuario profano. Con Access, si una consulta sale mal, puede corromper toda la tabla y, posiblemente, toda la base de datos. Saber que cuando se ejecuta una consulta, si sale mal, no afectará a la integridad de los datos que ya están allí, da mucha más flexibilidad.
- Soporte multiusuario. Incluso si no se utiliza SDE o alguna otra capa de abstracción entre la base de datos y el SIG, se trata de un salto enorme. Un ejemplo personal se refiere a la construcción de tablas extendidas de atributos en una base de datos PostgreSQL. Cuando tenía las tablas en MS Access, si alguien hacía referencia a ellas en un
.mxd
No siempre podría editarlos o cambiar su estructura hasta que todos los demás bloqueos de usuario estuvieran liberados. Con PostgreSQL, puedo ver los datos en ArcGIS al mismo tiempo que actualizo los atributos y modifico la estructura de la tabla a través de la base de datos. Esto me ahorra mucho tiempo. También significa que una vez que tenga otros usuarios accediendo a estos mismos datos, podré hacer otros cambios durante el día sin tener que asegurarme de que todo el mundo ha cerrado sus referencias a la base de datos.
- Alejarse de una estructura de datos en silos. Una vez que se centralizan los datos y todo el mundo puede acceder a ellos, se reduce la necesidad de que grupos más pequeños tengan sus propias copias de los mismos datos, o la única copia de algunos datos que no están dispuestos a compartir por temor a que se corrompan, etc. Si sabes cómo utilizar un RDBMS, puedes asegurarte de que todos los datos tienen una copia de seguridad adecuada, al tiempo que permites diferentes niveles de acceso a los distintos usuarios en función de sus necesidades individuales y organizativas. Además, utilizar una base de datos de este tipo reduce la probabilidad de que se produzca una situación en la que no puedas extraer datos para compartirlos con terceros. Esta historia es un buen ejemplo . Tenga en cuenta que el mayor problema en esta situación fue más la incapacidad de utilizar el software para extraer los datos a un formato utilizable que un problema con el almacenamiento de datos en sí. No obstante, pone de manifiesto el problema de silos de datos .
Mi último comentario se aplica a ambas preguntas, de por qué querrías aprender SQL o PostgreSQL. El hecho es que cada uno de ellos se convierte en una herramienta más que te ayuda en tu trabajo. Saber SQL te permite acceder a datos de diversas fuentes y realizar muchas operaciones con ellos sin necesidad de software especializado. Conocer PostgreSQL te introduce en una estructura de base de datos mucho más robusta. Tanto si acabas usándola como si usas una plataforma RDBMS diferente, verás que hay muchas similitudes, por lo que estarás adquiriendo conocimientos sobre múltiples sistemas. Python, SQL, PostgreSQL y MS Access son todos apropiados en circunstancias particulares, con cierto solapamiento. Estar familiarizado con todos ellos te permitirá aprovechar sus ventajas individuales para agilizar tu flujo de trabajo.
1 votos
+1^10 solo porque esta es una gran pregunta sobre las limitaciones de pgdb. Sin embargo, como has dicho, el problema desaparecerá si cambias a SQL. Un puñado de líneas de SQL puede reemplazar fácilmente docenas de líneas de Python - por no hablar de que por lo general no tienden a dejar derivados, bagaje rancio (como shapefiles creado a mitad de camino a través de una automatización) por ahí después de un trabajo está hecho. :)
0 votos
Gracias elrobis, sé que mudarme a un mundo SQL sería lo ideal pero es complicado coordinar la mudanza y formarme en todo lo que necesito para ser equivalentemente funcional en ese entorno. Definitivamente voy a aprender todo lo que pueda pero creo que será una migración gradual.
1 votos
Ahora que ya he respondido, me parece que es mejor plantear esto como dos preguntas separadas. La cuestión del tamaño y la de SQL/PostgreSQL son igualmente válidas, pero en realidad no están relacionadas en absoluto. Dividirlas ayudaría a otros que busquen información similar. Sólo una idea.