इस प्रोजेक्ट के बारे में

GraFlo एक Python लाइब्रेरी है जो फ़ाइलों, SQL डेटाबेस, RDF, REST API या Kafka टॉपिक्स से रिकॉर्ड को लेबल्ड प्रॉपर्टी ग्राफ़ में बदलती है। आप ग्राफ़ को एक बार, manifest नामक YAML फ़ाइल में परिभाषित करते हैं, और GraFlo स्कीमा बनाती है तथा vertices और edges को आपके चुने हुए ग्राफ़ डेटाबेस में, या डिस्क पर एक डायरेक्टरी में लिखती है। यह उन इंजीनियरों के लिए है जो कई स्रोतों से ग्राफ़ बनाते हैं और चाहते हैं कि उसका विवरण लोड स्क्रिप्ट्स में बिखरा न हो, बल्कि एक समीक्षा-योग्य फ़ाइल में हो। ## इससे आप क्या कर सकते हैं - **ग्राफ़ को एक बार परिभाषित करें और उसमें डेटा लोड करें।** एक manifest vertex और edge प्रकारों के नाम बताता है, बताता है कि कौन-सी properties किसी vertex की पहचान करती हैं, और बताता है कि प्रत्येक प्रकार का रिकॉर्ड vertices और edges कैसे बनता है। वही manifest ArangoDB, Neo4j, TigerGraph, FalkorDB, Memgraph, NebulaGraph, PostgreSQL या file backend में लोड होता है, और समान पहचान वाले रिकॉर्ड एक ही vertex बन जाते हैं। GraFlo मौजूदा ग्राफ़ को Neo4j, ArangoDB या PostgreSQL से किसी अन्य डेटाबेस में भी कॉपी करती है (`GraphEngine.migrate_graph`)। - **समय के साथ विवरण बदलें, दर्ज इतिहास के साथ।** किसी प्रकार का नाम बदलना, दो प्रकारों को मिलाना या किसी property का प्रकार बदलना एक typed operation है। Operations commits के रूप में दर्ज होते हैं (`graflo commit`, `log`, `checkout`, `verify`, `revert`) जिन्हें आप replay कर सकते हैं, जाँच सकते हैं और, अधिकांश operations के लिए, undo कर सकते हैं। एक manifest में परिवर्तनों की दो branches को three-way merge (`graflo merge3`) से मिलाया जाता है, और अलग-अलग टीमों द्वारा लिखे गए दो manifests को union (`graflo merge`) से एक में जोड़ा जाता है। - **विवरण जाँचें और अनुमान लगाएँ।** GraFlo PostgreSQL डेटाबेस या OWL ontology से manifest का अनुमान लगाती है, sample data से उन properties का प्रस्ताव करती है जो किसी रिकॉर्ड की पहचान करती हैं, और manifest को conformance profile (`graflo check`) के विरुद्ध जाँचती है, जो modeling नियमों का एक समूह है जैसे "प्रत्येक vertex प्रकार अपनी पहचान घोषित करता है"। ## एक झलक एक manifest में तीन blocks होते हैं: `schema` बताता है कि ग्राफ़ कैसा दिखता है, `ingestion_model` बताता है कि रिकॉर्ड उस पर कैसे map होते हैं, और `bindings` बताता है कि रिकॉर्ड कहाँ से आते हैं। यह वाला `person_id`, `person` और `department` कॉलम वाली CSV फ़ाइलें पढ़ता है: ```yaml schema: metadata: {name: hr} graph: vertex_config: vertices: - {name: person, properties: [id, name], identity: [id]} - {name: department, properties: [name], identity: [name]} edge_config: edges: [{source: person, target: department}] ingestion_model: resources: - name: departments pipeline: - {vertex: person, from: {id: person_id, name: person}} - {vertex: department, from: {name: department}} bindings: connectors: - {regex: "^dep.*\\.csv$", sub_path: data, resource_name: departments} ``` यह इसे ArangoDB में लोड करता है: ```python from graflo import GraphEngine, GraphManifest from graflo.connections import ArangoConfig manifest = GraphManifest.from_yaml("manifest.yaml") manifest.finish_init() engine = GraphEngine() engine.define_and_ingest(manifest=manifest, target_db_config=ArangoConfig.from_env()) ``` `ArangoConfig.from_env()` `ARANGO_URI`, `ARANGO_USERNAME`, `ARANGO_PASSWORD` और `ARANGO_DATABASE` पढ़ता है; प्रत्येक डेटाबेस में ऐसी एक class होती है। देखें [Database connections](https://growgraph.github.io/graflo/guides/database_connections/)। ## दस्तावेज़ीकरण पूरा दस्तावेज़ीकरण: [growgraph.github.io/graflo](https://growgraph.github.io/graflo) - [Quick start](https://growgraph.github.io/graflo/getting_started/quickstart/): दो CSV फ़ाइलों से ग्राफ़ तक, चरण दर चरण - [Creating a manifest](https://growgraph.github.io/graflo/getting_started/creating_manifest/): एक manifest के तीन blocks - [Examples](https://growgraph.github.io/graflo/examples/): चलाने योग्य उदाहरण, प्रत्येक में एक प्रश्न, उनका डेटा [`examples/`](https://github.com/growgraph/graflo/tree/main/examples) के अंतर्गत - [Concepts](https://growgraph.github.io/graflo/concepts/): schema, identity, ingestion, connectors, evolution और version control - [Guides](https://growgraph.github.io/graflo/guides/): database connections, graph migration, schema inference, API wiring, bulk load - [GraFlo ontology](https://growgraph.github.io/graflo/concepts/schema/ontology/): RDF के रूप में एक manifest (`graflo manifest-to-rdf`, `graflo rdf-to-manifest`) ## इंस्टॉलेशन GraFlo के लिए Python 3.11 या नया चाहिए। डेटाबेस क्लाइंट, RDF और Kafka समर्थन डिफ़ॉल्ट इंस्टॉल का हिस्सा हैं। ```bash pip install graflo ``` वैकल्पिक extras ([Installation](https://growgraph.github.io/graflo/getting_started/installation/) गाइड देखें): - `dev`: pytest और उसके plugins, hypothesis, ty, pre-commit - `docs`: ProperDocs और उसके plugins, दस्तावेज़ीकरण साइट बनाने के लिए - `plot`: `graflo plot-manifest` और `graflo merge` तथा `graflo merge3` के `--plot` चित्रों के लिए `pygraphviz` ```bash pip install "graflo[dev,docs,plot]" ``` ## विकास किसी clone से इंस्टॉल करने के लिए: ```shell git clone [email protected]:growgraph/graflo.git && cd graflo uv sync --extra dev ``` पूरे workflow के लिए [Contributing Guide](https://growgraph.github.io/graflo/contributing/) देखें। ### परीक्षण डेटाबेस परीक्षणों के लिए डेटाबेस containers चाहिए। उन्हें clone से [docker/](https://github.com/growgraph/graflo/tree/main/docker) के अंतर्गत scripts से शुरू करें: ```shell cd docker ./start-all.sh # Start all services ./stop-all.sh # Stop all services ./cleanup-all.sh # Remove containers and volumes ``` प्रति-engine compose फ़ाइलें और ports [docker README](https://github.com/growgraph/graflo/blob/main/docker/README.md) में प्रलेखित हैं। परीक्षण चलाने के लिए: ```shell uv run pytest test ``` TigerGraph, NebulaGraph और Kafka परीक्षण तब तक छोड़े जाते हैं जब तक आप `--run-tigergraph`, `--run-nebula` या `--run-kafka` पास न करें। जिन suites को किसी डेटाबेस की आवश्यकता नहीं होती, वे containers के बिना चलती हैं, और CI उन्हें हर pull request पर चलाता है: ```shell uv run pytest test --ignore=test/db --ignore=test/data_source --ignore=test/object_storage ``` ## लाइसेंस [Apache License 2.0](https://github.com/growgraph/graflo/blob/main/LICENSE) के अंतर्गत ओपन सोर्स। कॉपीराइट और trademark सूचनाएँ [NOTICE](https://github.com/growgraph/graflo/blob/main/NOTICE) में हैं: लाइसेंस **GraFlo** और **GrowGraph** marks में कोई अधिकार नहीं देता। relicensing से पहले के releases Business Source License 1.1 के अंतर्गत जारी हुए थे और वे उन शर्तों को बनाए रखते हैं; [changelog](https://github.com/growgraph/graflo/blob/main/CHANGELOG.md) देखें। ## योगदान योगदान का स्वागत है। [Contributing Guide](https://growgraph.github.io/graflo/contributing/) देखें। योगदानकर्ता अपने पहले pull request पर टिप्पणी करके एक बार [Contributor License Agreement](https://github.com/growgraph/graflo/blob/main/CLA.md) स्वीकार करते हैं।