{"id":18244154,"url":"https://github.com/tomijuarez/smart-buildings","last_synced_at":"2026-04-16T19:03:24.389Z","repository":{"id":152504790,"uuid":"119065378","full_name":"tomijuarez/smart-buildings","owner":"tomijuarez","description":"Database performance comparison between PostgreSQL and MongoDB in a SCADA application context.","archived":false,"fork":false,"pushed_at":"2018-01-26T15:11:20.000Z","size":26217,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T18:38:50.678Z","etag":null,"topics":["database","document-database","mongodb","performance","postgresql","relational-databases","scada"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomijuarez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-26T15:04:22.000Z","updated_at":"2023-01-30T20:40:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"e4b129e1-63dc-4acf-ba17-524044c92154","html_url":"https://github.com/tomijuarez/smart-buildings","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tomijuarez/smart-buildings","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fsmart-buildings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fsmart-buildings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fsmart-buildings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fsmart-buildings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomijuarez","download_url":"https://codeload.github.com/tomijuarez/smart-buildings/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fsmart-buildings/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265218691,"owners_count":23729524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","document-database","mongodb","performance","postgresql","relational-databases","scada"],"created_at":"2024-11-05T09:15:37.837Z","updated_at":"2026-04-16T19:03:19.370Z","avatar_url":"https://github.com/tomijuarez.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nEste documento detalla los pasos para crear las bases de datos, migrar la\ninformación y correr las pruebas con los programas creados para automatizar dichas tareas.\nEl proyecto fue construido sobre Ubuntu y es necesario correrlas bajo un sistema operativo\nbasado en Debian o bien realizar las acciones manualmente.\n\n**IMPORTANTE**\nTodos los scripts se hicieron en base al bash de Linux. Si por algún motivo el\ndocente no dispone de Ubuntu, los scripts no funcionarán y deberá importar manualmente\nlos archivos en PostgreSQL y en MongoDB -ver último paso carga manual- y ejecutar todas\nlas consultas manualmente. Recomiendo fuertemente correr el proyecto en Ubuntu ya\nque se construyó y testeó en este entorno.\n\n# Instalación de Software\nPara ejecutar correctamente las consultas es necesario instalar los siguientes\nprogramas:\n1. MongoDB (versión 3.4.4+): https://www.mongodb.com/download-center#community\n2. PostgreSQL (versión 9.5.8+): https://www.postgresql.org/download/\n3. Java (versión 1.8+): https://www.java.com/es/download/\nAdemás, se recomienda instalar los siguientes para correr las pruebas:\n1. PgAdmin3: https://www.pgadmin.org/download/\n2. RoboMongo: https://robomongo.org/download\n## Preparar PostgreSQL\n### Paso 1: Posicionarse en la carpeta.\nUna vez descargado el .zip, descomprimirlo y dirigirse a dicha carpeta utilizando el\ncomando cd o bien abriendo la carpeta con la interfaz gráfica, dar click secundario y clickear\nen “abrir en terminal”.\n### Paso 2: Crear la base de datos, el esquema e índices en\npostgreSQL.\nPrimero debe crearse una base de datos en PostgreSQL llamada “scada” y un\nesquema público. Puede realizarse mediante pgadmin3 o bien manualmente. Es necesario\nque la base de datos se llama scada ya que así será referenciada a lo largo del proyecto. A\ncontinuación, seguir los siguientes pasos:\na. Dirigirse a la carpeta del proyecto contenedora de datos de PostgreSQL: tipear en la\nconsola “cd postgresql”.\nb. Cambiar la contraseña de la base de datos en el script prepare.sh. Para ello, tipear\n“sudo gedit prepare.sh”. Se abrirá un editor de texto y se debe modificar la siguiente\nlínea export PGPASSWORD=”PONER ACÁ LA CONTRASEÑA\". Una vez puesta\nla contraseña se debe guardar el script.\nc. Dar permiso de ejecución al script “prepare.sh” tipeando en consola “sudo chmod +x\nprepare.sh”. En este paso el sistema solicitará la contraseña del usuario root.\nd. Correr el script tipeando “./prepare.sh”.\n### Paso 3: Insertar los datos en las tablas de PostgreSQL.\na. Dirigirse a la carpeta data tipeando “cd data”.\nb. Cambiar la contraseña de la base de datos en el script load_data.sh. Para ello, tipear\n“sudo gedit load_data.sh”. Se abrirá un editor de texto y se debe modificar la\nsiguiente línea export PGPASSWORD=”PONER ACÁ LA CONTRASEÑA\". Una\nvez puesta la contraseña se debe guardar el script.\nc. Dar permisos al script load_data.sh tipeando “sudo chmod +x load_data.sh”.\nd. Correr el script tipeando “./load_data.sh” y esperar a que finalice la ejecución (~15\nminutos). Luego, los datos estarán insertados en las tablas del esquema. El script\narroja el tiempo que tardó la inserción de datos en el fichero “time.txt” dentro de la\ncarpeta postgresql/data.\n## Preparar MongoDB\nLas pruebas sobre MongoDB se realizaron sin contraseña ni usuario particular; se\nutilizó la configuración por defecto.\n### Paso 1: Iniciar servidor.\nIniciar el servidor de MongoDB en una nueva terminal tipeando “mongod”. Se la\ndebe dejar corriendo durante el resto de la instalación.\n### Paso 2: Posicionarse en la carpeta.\nIr a la carpeta raíz del proyecto utilizando el comando cd o bien abriendo la carpeta\ncon la interfaz gráfica, dar click secundario y clickear en “abrir en terminal”.\n### Paso 3: Crear la base de datos, el esquema e índices en\npostgreSQL.\na. Dirigirse a la carpeta del proyecto contenedora de datos de MongoDB: tipear en la\nconsola “cd mongodb”.\nb. Correr el script de creación de índices tipeando “mongo \u003c\nindexes/indexes_create.js”.\n## Migrar Datos de PostgreSQL a MongoDB\nIr a la carpeta raíz del proyecto utilizando el comando cd o bien abriendo la carpeta\ncon la interfaz gráfica, dar click secundario y clickear en “abrir en terminal”.\na. Tipear en la consola “sudo java -jar \"java/target/migrator-1.0-SNAPSHOT.jar\"”.\nEsperar a que finalice (~30min).\n## Exportar/Importar Colecciones en MongoDB\nLa migración de PostgreSQL a MongoDB fue solo para obtener esa misma\ninformación replicada en las distintas bases de datos. De todas formas, es necesario\nguardar la información en formato json realizando un dump y luego importarlo para tomar\nmétricas de inserción.\n### Paso 1: Realizar Dump de las Colecciones (Exportar).\na. Dirigirse a la carpeta del proyecto contenedora de datos de MongoDB: tipear en la\nconsola “cd mongodb”.\nb. Dar permisos al script save_data.sh tipeando “sudo chmod +x save_data.sh”.\nc. Correr el script tipeando “./save_data.sh” y esperar a que finalice la ejecución.\nLuego, los documentos de cada colección estarán exportados y guardados en\nformato .json en la carpeta mongodb/data.\n#### Paso 2: Realizar Carga de las Colecciones (Importar).\na. Dar permisos al script load_data.sh tipeando “sudo chmod +x load_data.sh”.\nb. Correr el script tipeando “./load_data.sh” y esperar a que finalice la ejecución. Este\nscript arroja el tiempo que tardó la ejecución de la carga de datos en el fichero\ntime.txt dentro de la carpeta mongodb/data.\n## Realizar Pruebas en Consultas de Selección\nUna vez que ambas bases de datos están preparadas es necesario correr las\npruebas de cada consulta. Para ello, se crearon carpetas para cada grupo de consultas (con\nagrupadores y funciones de agregación, sin repeticiones y con ensambles). Dependiendo\ndel motor, pararse en la carpeta raíz y dirigirse hacia la carpeta /postgres o /mongodb y\nluego a la carpeta selects.\n● Si se quiere ejecutar las pruebas de PostgreSQL: posicionarse en la carpeta raíz del\nproyecto y tipear cd postgres/selects.\n● Si se quiere ejecutar las pruebas de MongoDB: posicionarse en la carpeta raíz del\nproyecto y tipear cd mongodb/selects.\n**Aclaraciones**\nDentro de la carpeta /selects (tanto de mongodb como de postgresql) existen tres\ncarpetas: /1, /2 y /3, las cuales se corresponden con las consultas con agrupadores y\nfunciones de agregación, consultas sin repeticiones y consultas con ensambles,\nrespectivamente.\nPara correr las pruebas se debe dirigir a la carpeta con las consultas deseadas (/1,\n/2 o /3), una vez allí se deben realizar los siguientes pasos:\na. Dar permisos al script run.sh tipeando “sudo chmod +x run.sh”.\nb. Correr el script tipeando “./run.sh” y esperar a que finalice la ejecución. Este script\nejecuta 30 veces cada consulta y arroja el tiempo que tardó cada una de las\nejecuciones por consulta y el promedio por cada consulta en un fichero llamado\ntime.txt dentro de la misma carpeta.\nEste script existe en cada una de las carpetas de consulta y para ambos motores.\n## Consultas de Modificación/Eliminación\nEstas consultas se encuentran en las carpetas /updates o /deletes dentro de la\ncarpeta de PostgreSQL o MongoDB.\n1. Si se quieren ejecutar las consultas de eliminación de PostgreSQL: posicionarse en\nla carpeta raíz del proyecto y tipear cd postgres/deletes.\n2. Si se quieren ejecutar las consultas de modificación de PostgreSQL: posicionarse en\nla carpeta raíz del proyecto y tipear cd postgres/updates.\n3. Si se quieren ejecutar las consultas de eliminación de MongoDB: posicionarse en la\ncarpeta raíz del proyecto y tipear cd mongodb/deletes.\n4. Si se quieren ejecutar las consultas de eliminación de MongoDB: posicionarse en la\ncarpeta raíz del proyecto y tipear cd mongodb/updates.\nAllí se encuentran las consultas en código SQL/JS depende del motor. Se deben\ncopiar las consultas y ejecutarlas manualmente, ya que no hay script para correrlas porque\nmodifican el estado de la base de datos.\n## Carga Manual\nIgnorar esta sección si se está en Linux y ver sólo si se opera desde Windows.\nSe debe ingresar a la carpeta raíz y luego dirigirse a /cargamanual. Dentro de esta carpeta\nse encuentra el dump de ambas bases de datos. Importar a PostgreSQL la información de\nla carpeta /cargamanual/postgresql e importar a Mongo la información de\n/cargamanual/mongodb. Recomiendo fuertemente correr el proyecto en Ubuntu ya que\nse construyó y testeó en este entorno\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomijuarez%2Fsmart-buildings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomijuarez%2Fsmart-buildings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomijuarez%2Fsmart-buildings/lists"}