{"id":21086621,"url":"https://github.com/shimaabetah/graphoplex","last_synced_at":"2025-05-16T11:32:12.256Z","repository":{"id":179557599,"uuid":"603453806","full_name":"ShimaaBetah/GraphoPlex","owner":"ShimaaBetah","description":"A distributed graph database engine with a supported query language","archived":false,"fork":false,"pushed_at":"2024-03-06T10:52:02.000Z","size":23421,"stargazers_count":23,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-04T00:05:01.948Z","etag":null,"topics":["distributed","graph","graph-database","grpc","redis","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ShimaaBetah.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-02-18T15:06:26.000Z","updated_at":"2024-09-30T19:22:25.000Z","dependencies_parsed_at":"2024-03-06T12:01:54.078Z","dependency_job_id":null,"html_url":"https://github.com/ShimaaBetah/GraphoPlex","commit_stats":null,"previous_names":["shimaabetah/graphoplex"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShimaaBetah%2FGraphoPlex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShimaaBetah%2FGraphoPlex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShimaaBetah%2FGraphoPlex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShimaaBetah%2FGraphoPlex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ShimaaBetah","download_url":"https://codeload.github.com/ShimaaBetah/GraphoPlex/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254522126,"owners_count":22085043,"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":["distributed","graph","graph-database","grpc","redis","spring-boot"],"created_at":"2024-11-19T20:48:50.826Z","updated_at":"2025-05-16T11:32:07.240Z","avatar_url":"https://github.com/ShimaaBetah.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n[![LinkedIn][linkedin-shield]][linkedin-url]\n\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ShimaaBetah/GraphoPlex\"\u003e\n    \u003ch1\u003eGraphoPlex\u003c/h1\u003e\n  \u003c/a\u003e\n\n  \u003cp align=\"center\"\u003e\nA distributed graph database engine that stores users' graph-like data with a supported query language.\n\u003c/p\u003e\n    \u003cbr /\u003e\n \u003ca  href=\"https://drive.google.com/file/d/1Jc09WC5AsXW4AQ3AddiRQJFJITIfJX8w/view?usp=sharing\"\u003eView Demo\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/ShimaaBetah/GraphoPlex/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/ShimaaBetah/GraphoPlex/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Motivation\nNowadays, in our data-driven world, various industries and domains are recognizing\nthe immense value of graph databases. Social Networks, Recommendation Systems, and\nBio-informatics are examples of such domains that could benefit from using a graph\ndatabase to store and process their intricate and interconnected data. Unlike traditional\nSQL(tabular) databases, graph databases provide flexible semantics that aligns with busi-\nness models in addition to eliminating the unnecessary overhead associated with SQL\ndatabases when querying complex and interconnected data. In addition, the increasing\namount of data needed to be stored requires graph database systems to be distributed\nacross multiple server\n\n## Architecture\nGraphoPlex consists of a client (an interactive shell in Python) and a cluster (multiple servers that run the same code and were implemented in Java).\nThe client could be connected to any server in the cluster through an HTTP connection to send user queries. \nInter-cluster communication is done through gRPC.\n\n\n\u003cp align=center\u003e\n\u003cimg src=\"./images/sys_arch (1).png\" alt=\"System Architecture\" style=\"width:600px;\"/\u003e\n\u003c/p\u003e\n\n\n\n## Getting Started\n### Prerequisites\n1) Python 3.6 or higher\n2) Java 17 or higher\n3) Maven 3.6.3 or higher\n4) Docker\n5) Redis\n\n\n### Installation \u0026 Setup\n1) Clone the repository\n```bash\ngit clone https://github.com/ShimaaBetah/GraphoPlex.git \u0026\u0026 cd GraphoPlex\n```\n\n\n2) Build the Server\n```bash\ncd graph_db \u0026\u0026 mvn install\n```\n\n## Usage\n1) Run the Server (this will only run 1 server on default 8080 port)\n```bash\nmvn spring-boot:run\n```\n\n2) Run the client\n```bash \npython3 client.py\n```\n\n3) Start writing commands\n\n   see section 3.2.2 in the \u003ca href=\"https://github.com/ShimaaBetah/GraphoPlex/blob/main/thesis.pdf\"\u003e thesis\u003c/a\u003e for more details about the supported commands.\n\n\n## How to run a cluster\nThe previous steps will only run 1 server on default 8080 port, to run a cluster of servers, you need to run the following commands.\n\n1) Setup app properties\n\n    open the file `graph_db/src/main/resources/application.properties` and change the following properties\n    ```bash \n    server.numOfServers= ${number of servers you want in the cluster}\n    grpc.servers.ports= ${grpc ports of the servers in the cluster separated by comma}\n    grpc.servers.hosts= ${ip address of the servers in the cluster separated by comma}\n    ```\n2) Build the server code\n    ```bash\n    cd graph_db \u0026\u0026 mvn install\n    ```\n3) Build Docker Image\n    ```bash\n    docker build -t graphdb-server .\n    ```\n4) Run Docker Container \n\n\n   ```\n   docker run --network=\"host\"  -e SERVER_ID=${server_id} -e REDIS_PORT=${redis_port} -e SERVER_PORT=${http_port} -e GRPC_SERVER_PORT=${grpc_port}  graphdb-server\n   \n   ```\n\n   this should be done for each server replacing all environment variables by actual values for each server in the cluster. \n   Note that if `server.numOfServers` in `application.properties` is `n` then SERVER_ID should be between `0` and `n-1`.\n\n   Also GRPC_SERVER_PORT should be the element with index of (SERVER_ID) in the array of `grpc.servers.ports` in the `application.properties` file .\n\n5) Run the client\n    ```bash \n    python3 client.py\n    ```\n    make sure that the `url` in client.py is belongs to one of the servers in the cluster\n6) Start writing commands as before\n\n## Roadmap\nThe project is NOT in active development. However, the following ideas are things that would be looked up next: \n- [ ] Parallel implementation for Dijkstra and DFS\n- [ ] Result Set visualization\n- [ ] Partitioning Strategy Enhancement \n- [ ] Result Set Visualization\n- [ ] Authentication and support for multiple users\n    \n\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nIf you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag \"enhancement\".\nDon't forget to give the project a star! Thanks again!\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## License\n\nDistributed under the GNU General Public License v3.0. See `LICENSE.txt` for more information.\n\n## Contact\n\nElshimaa Betah - shimaabetah1911@gmail.com\n\n\n\n\n\n\n[contributors-shield]: https://img.shields.io/github/contributors/ShimaaBetah/GraphoPlex.svg?style=for-the-badge\n[contributors-url]: https://github.com/ShimaaBetah/GraphoPlex/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/ShimaaBetah/GraphoPlex.svg?style=for-the-badge\n[forks-url]: https://github.com/ShimaaBetah/GraphoPlex/network/members\n[stars-shield]: https://img.shields.io/github/stars/ShimaaBetah/GraphoPlex.svg?style=for-the-badge\n[stars-url]: https://github.com/ShimaaBetah/GraphoPlex/stargazers\n[issues-shield]: https://img.shields.io/github/issues/ShimaaBetah/GraphoPlex.svg?style=for-the-badge\n[issues-url]: https://github.com/ShimaaBetah/GraphoPlex/issues\n[license-shield]: https://img.shields.io/github/license/ShimaaBetah/GraphoPlex.svg?style=for-the-badge\u0026\n[license-url]: https://github.com/ShimaaBetah/GraphoPlex/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge\u0026logo=linkedin\u0026colorB=555\n[linkedin-url]: https://www.linkedin.com/in/shimaa-ahmed2864/\n[product-screenshot]: images/screenshot.png\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshimaabetah%2Fgraphoplex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshimaabetah%2Fgraphoplex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshimaabetah%2Fgraphoplex/lists"}