18

Khi bạn nghĩ về một ứng dụng web, cơ sở dữ liệu đồ thị thường không xuất hiện trong tâm trí bạn. Thay vào đó, hầu hết mọi người chỉ sử dụng cơ sở dữ liệu SQL để lưu trữ thông tin. Mặc dù điều này hoàn toàn có thể chấp nhận được đối với hầu hết các trường hợp sử dụng, nhưng có một số trường hợp chúng ta có thể thấy những lợi ích to lớn khi sử dụng cơ sở dữ liệu đồ thị. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tạo một ứng dụng web cơ bản bằng Flask để lưu trữ tất cả thông tin của nó trong cơ sở dữ liệu đồ thị. Nói chính xác hơn, chúng tôi đang sử dụng Memgraph DB , một cơ sở dữ liệu trong bộ nhớ có thể dễ dàng xử lý nhiều thông tin và thực hiện các lệnh đọc / ghi khá nhanh chóng.

Trường hợp sử dụng của chúng tôi là Biểu đồ mạng xã hội (trong mã được gọi là SNG để thuận tiện) đại diện cho người dùng và các kết nối giữa họ. Thông thường, một biểu đồ như vậy sẽ chứa hàng triệu mối quan hệ và các thuật toán được thực hiện trên chúng không hoạt động tốt với dữ liệu được lưu trữ trong cơ sở dữ liệu quan hệ.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn từng bước cách xây dựng một ứng dụng web Python đơn giản từ dưới lên để bạn hiểu cơ bản về các công nghệ được sử dụng. Bạn cũng có thể tìm thấy tất cả mã ở đây nếu bạn không muốn làm việc với nó khi bạn xem qua hướng dẫn. Nếu, tại bất kỳ thời điểm nào trong hướng dẫn này, bạn có câu hỏi hoặc điều gì đó không phù hợp với bạn, vui lòng đăng trên StackOverflow với thẻ memgraphdb.

Cách hình dung một mạng xã hội bằng Python với cơ sở dữ liệu đồ thị: Flask + ...

Grandjean, Martin (2014). La connaissance est un réseau . CC BY-SA 3.0

Điều kiện tiên quyết

Bởi vì chúng tôi đang xây dựng một ứng dụng web hoàn chỉnh, có một số công cụ mà bạn sẽ cần cài đặt trước khi chúng tôi bắt đầu:

  • Thơ : một công cụ để quản lý và đóng gói phụ thuộc bằng Python. Nó cho phép bạn khai báo các thư viện mà dự án của bạn phụ thuộc vào và nó sẽ quản lý (cài đặt / cập nhật) chúng cho bạn.
  • Flask : một khung công tác web rất mạnh mẽ cung cấp cho bạn các công cụ, thư viện và công nghệ được sử dụng để phát triển web. Một ứng dụng Flask có thể nhỏ như một trang web hoặc phức tạp như một giao diện quản lý.
  • Docker and Compose : một nền tảng mở để phát triển, vận chuyển và chạy các ứng dụng. Nó cho phép chúng tôi tách ứng dụng của mình khỏi cơ sở hạ tầng của chúng tôi (máy chủ). Nếu bạn đang cài đặt Docker trên Windows, tính năng Soạn sẽ được bao gồm. Đối với Linux và macOS, hãy truy cập trang web này .
  • Memgraph DB : một cơ sở dữ liệu đồ thị trong bộ nhớ được phân phối hoàn toàn, nguyên bản được xây dựng để xử lý các trường hợp sử dụng theo thời gian thực ở quy mô doanh nghiệp. Làm theohướng dẫn Cài đặt Docker trên trang Bắt đầu Nhanh. Mặc dù nó hoàn toàn là tùy chọn, nhưng tôi khuyến khích bạn cũng nên cài đặt Memgraph Lab để bạn có thể thực hiệncác truy vấn openCypher trên cơ sở dữ liệu trực tiếp và xem các kết quả trực quan.

Tạo cấu trúc dự án và xử lý sự phụ thuộc

Đôi khi, hệ thống đóng gói tiêu chuẩn và quản lý phụ thuộc bằng Python có thể gây nhầm lẫn cho người mới bắt đầu, vì vậy chúng tôi quyết định sử dụng Thơ.

Để bắt đầu xây dựng cấu trúc dự án của chúng tôi, hãy chọn một thư mục làm việc và chạy:

poetry new sng-demo

Bây giờ bạn sẽ có một thư mục với nội dung sau:

sng-demo<font>
├── pyproject.toml<font>
├── README.rst<font>
├── sng_demo<font>
│  └── __init__.py<font>
└── tests<font>
   ├── __init__.py<font>
   └── test_poetry_demo.py<font>
</font></font></font></font></font></font></font></font>

Trong hướng dẫn này, chúng tôi sẽ không sử dụng các chức năng thử nghiệm, vì vậy hãy tiếp tục và xóa thư mục testscũng như tệp README.rst.

Bây giờ chúng ta cần thêm các phụ thuộc cho dự án của mình. Giả sử rằng chúng ta sẽ chạy ứng dụng bên trong vùng chứa Docker, chúng ta không cần cài đặt cục bộ các phần phụ thuộc mà chỉ cần cài đặt bên trong vùng chứa. Sao chép các tệp project.tomlpoetry.lockđặt chúng vào thư mục gốc của dự án. Điều duy nhất chúng ta cần làm về quản lý phụ thuộc là cho Docker biết cách chạy Thơ khi khởi động để nó có thể cài đặt / cập nhật tất cả các phụ thuộc cần thiết bên trong vùng chứa.

Tài liệu hóa một ứng dụng

Trong thư mục gốc của dự án, tạo hai tệp Dockerfiledocker-compose.yml. Ở đầu Dockerfile, chúng tôi chỉ định phiên bản Python và hướng dẫn vùng chứa cài đặt CMake , thơ , mgclientpymgclient . Thơ là cần thiết để quản lý các phụ thuộc của chúng ta bên trong vùng chứa, trong khi CMake và mgclient được yêu cầu cho pymgclient, trình điều khiển Python cho Memgraph DB .
Bạn không cần phải tập trung quá nhiều vào phần này, chỉ cần sao chép mã vào Dockerfile:

FROM python:3.7

#Install CMake
RUN apt-get update && \
  apt-get --yes install cmake

#Install poetry
RUN pip install -U pip \
  && curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
ENV PATH="${PATH}:/root/.poetry/bin"

#Install mgclient
RUN apt-get install -y git cmake make gcc g++ libssl-dev && \
  git clone https://github.com/memgraph/mgclient.git /mgclient && \
  cd mgclient && \
  git checkout 5ae69ea4774e9b525a2be0c9fc25fb83490f13bb && \
  mkdir build && \
  cd build && \
  cmake .. && \
  make && \
  make install

#Install pymgclient
RUN git clone https://github.com/memgraph/pymgclient /pymgclient && \
  cd pymgclient && \
  python3 setup.py build && \
  python3 setup.py install

Tiếp theo, chúng tôi xác định thư mục làm việc với:

WORKDIR /app
COPY poetry.lock pyproject.toml /app/

Lệnh thứ hai sẽ cho phép chúng tôi lưu vào bộ đệm các yêu cầu của dự án và chỉ cài đặt lại chúng khi pyproject.tomlhoặc poetry.lockđược thay đổi.

RUN poetry config virtualenvs.create false && \
  poetry install --no-interaction --no-ansi

Chúng ta không cần tạo một môi trường ảo, vì ứng dụng của chúng ta đã được cô lập bằng cách nằm trong vùng chứa Docker. Để vô hiệu hóa nó, virtualenvs.createcần được đặt thành false.

Dòng thứ hai trong lệnh đảm bảo rằng Thơ không hỏi chúng ta câu hỏi tương tác nào trong khi cài đặt / cập nhật các phần phụ thuộc và nó làm cho đầu ra thân thiện hơn với nhật ký.

COPY . /app
EXPOSE 5000
ENTRYPOINT [ "poetry", "run" ]

Đây là nơi về cơ bản chúng tôi tạo tất cả các thư mục và tệp bên trong vùng chứa của chúng tôi. Các EXPOSElệnh thông Docker rằng gian nghe container trên các cổng mạng quy định tại thời gian chạy.

Tiếp theo, chúng ta cần tạo một docker-compose.ymltệp. Soạn là một công cụ để xác định và chạy các ứng dụng Docker nhiều vùng chứa. Với Soạn thư, bạn sử dụng tệp YAML để định cấu hình các dịch vụ của ứng dụng. Sau đó, với một lệnh duy nhất, bạn tạo và khởi động tất cả các dịch vụ từ cấu hình của mình. Đối với dự án của chúng tôi, chúng tôi cần hai dịch vụ. Một là ứng dụng web ( sng_demo) và một là phiên bản cơ sở dữ liệu ( memgraph).

Nếu bạn đã làm theo hướng dẫn về cách thiết lập Memgraph DB với Docker một cách chính xác, bạn chỉ cần thêm mã sau vào docker-compose.ymltệp của mình để chạy vùng chứa:

version: '3'
services:
  memgraph:
    image: "memgraph"
    ports:
      - "7687:7687"
  sng_demo:
    build: .
    volumes:
      - .:/app
    ports:
      - "5000:5000"
    environment:
      MG_HOST: memgraph
      MG_PORT: 7687
    depends_on:
      - memgraph

Khi nói đến portskhóa, có một sự khác biệt quan trọng giữa HOST_PORTCONTAINER_PORT . Số đầu tiên trong khóa là HOST_PORT và nó có thể được sử dụng để kết nối từ máy chủ của bạn với dịch vụ (ví dụ: với Memgraph Lab ). Số thứ hai chỉ định CONTAINER_PORT , được sử dụng để giao tiếp dịch vụ với dịch vụ. Chính xác hơn, dịch vụ của chúng tôi sng_dbcó thể sử dụng cổng này để truy cập dịch vụ memgraphvà kết nối với cơ sở dữ liệu.

Các environmentchìa khóa chứa MG_HOSTMG_PORTđại diện cho các biến môi trường trong container của dịch vụ. Chúng lưu trữ memgraphđịa chỉ dịch vụ và cổng cần thiết để thiết lập kết nối cơ sở dữ liệu. Các depends_onphím được sử dụng để bắt đầu dịch vụ phụ thuộc trật tự vì chúng ta cần cơ sở dữ liệu để bắt đầu trước khi ứng dụng web.

Các buildchính cho phép chúng ta nói Soạn nơi để tìm hướng dẫn xây dựng cũng như các tập tin và / hoặc thư mục sử dụng trong quá trình xây dựng. Bằng cách sử dụng volumeskhóa, chúng tôi bỏ qua việc phải liên tục khởi động lại hình ảnh của mình để tải các thay đổi mới cho hình ảnh đó từ máy chủ.

Cuối cùng, chúng tôi có một dự án dày đặc sử dụng Thơ! Cách tiếp cận này rất tốt cho việc phát triển vì nó cho phép chúng tôi chạy dự án của mình trên các hệ điều hành và môi trường hoàn toàn khác nhau mà không phải lo lắng về các vấn đề tương thích.

Phát triển web với Flask

Flask sử dụng rất đơn giản, vậy tại sao bạn không tạo Hello World! trang để thử thiết lập Docker + Thơ của chúng tôi.
Trong thư mục gốc của dự án, hãy tạo một tệp được gọi app.pyvới mã sau:

from flask import Flask
 
app = Flask(__name__)
 
 
@app.route('/')
@app.route('/index')
def index():
   return "Hello World"

Đầu tiên, chúng tôi nhập Flasklớp và sau đó tạo một thể hiện của nó. Người route()trang trí cho Flask biết URL nào sẽ kích hoạt chức năng của chúng ta. Bây giờ, chúng tôi cần cho Docker biết cách chạy ứng dụng của chúng tôi. Điều này có thể được thực hiện bằng cách tạo một tập lệnh đơn giản trong thư mục gốc của dự án. Hãy gọi nó là start.sh:

#!/bin/bash
export FLASK_APP=app.py
export FLASK_ENV=development
flask run --host 0.0.0.0

Đặt FLASK_ENVthành developmentsẽ bật chế độ gỡ lỗi. Điều này làm cho Flask sử dụng một trình gỡ lỗi và tải lại tương tác.

Cài đặt FLASK_APPđể app.pychỉ định cách khởi động ứng dụng.

Chúng tôi cần cho Docker biết khi nào và làm thế nào để chạy tập lệnh này, vì vậy hãy đặt đoạn mã sau vào Dockerfilesau dòng của bạn EXPOSE 5000:

ADD start.sh /
RUN chmod +x /start.sh

Lệnh chmod +xlàm cho tập lệnh có thể thực thi được bằng cách đặt quyền phù hợp.

Để thực thi tập lệnh, hãy thêm lệnh sau vào sau dòng ENTRYPOINT [ "poetry", "run" ]:

CMD ["/start.sh"]

Đó là nó! Trang web đầu tiên của chúng tôi đã sẵn sàng, vì vậy hãy bắt đầu ứng dụng của chúng tôi để đảm bảo rằng chúng tôi không có bất kỳ lỗi nào. 

Trong thư mục gốc của dự án, hãy thực thi:

docker-compose build

Lần xây dựng đầu tiên sẽ mất một khoảng thời gian, vì Docker phải tải xuống và cài đặt rất nhiều phụ thuộc.
Sau khi chạy xong:

docker-compose up

URL của ứng dụng web của chúng tôi là http: // localhost: 5000 / . Khi bạn mở nó, sẽ có thông báo, Hello World! , có nghĩa là ứng dụng đã được thiết lập và đang chạy.

Bây giờ đã đến lúc tạo một trang web phức tạp hơn chứa Đồ thị mạng xã hội của chúng ta. Trong thư mục gốc của dự án, hãy tạo một thư mục có tên templatesvà trong đó có một tệp có tên base.html. Đây sẽ là mẫu HTML cơ sở của chúng tôi cho các trang khác. Sao chép mã:

<!doctype html>
<html lang=""en"">

<head>
    <meta charset=""utf-8"">
    <meta name=""viewport"" content=""width=device-width," initial-scale="1," shrink-to-fit="no"">

    <link rel=""stylesheet"" href=""https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"">
    <link rel=""stylesheet"" href=""/static/css/style.css"">

    
    
    

    <title>Social Network Graph Demo</title>
</head>

<body>
    {% block content %} {% endblock %}
</body>

</html>

Chúng tôi cũng cần tạo một tệp HTML cho trang đích thực của chúng tôi sử dụng tệp cơ sở này và một tệp JavaScript đi kèm. Tạo tệp HTML ở cùng vị trí với tên index.htmlvà sao chép mã sau vào đó:

{% extends 'base.html' %} {% block content %}
<div class=""container"">
  Hello World!
</div>

{% endblock %}

Trong thư mục gốc của dự án, hãy tạo một thư mục được gọi staticvới một thư mục con được gọi jsvà một thư mục khác được gọi css. Các jsthư mục sẽ chứa tất cả các tập tin JavaScript địa phương cần thiết trong khi cssthư mục sẽ chứa tất cả các stylesheets CSS. Trong jsthư mục tạo một tệp được gọi index.jsvà trong cssthư mục có một tệp được gọi style.css. Chỉ để chúng trống rỗng bây giờ.

Nếu bạn muốn tìm hiểu thêm về phát triển web với Flask, tôi khuyên bạn nên thử hướng dẫn này .

Cấu trúc dự án hiện tại của bạn sẽ như thế này:

sng-demo<font>
├── sng_demo<font>
│  └── __init__.py<font>
├── templates<font>
│  ├── base.html<font>
│  └── index.html<font>
├── static<font>
│  ├── css<font>
│  │  └── style.css<font>
│  └── js<font>
│     └── index.js<font>
├── app.py<font>
├── docker-compose.yml<font>
├── Dockerfile<font>
├── poetry.lock<font>
├── pyproject.toml<font>
└── start.sh<font>
</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>

Mô hình Dữ liệu và Kết nối Cơ sở dữ liệu

Trong sng-demothư mục ứng dụng , hãy tạo một thư mục có tên database. Thư mục này sẽ chứa tất cả các mô-đun mà chúng ta cần giao tiếp với cơ sở dữ liệu. Bạn có thể tìm thấy chúng ở đây và chỉ cần sao chép nội dung của chúng. Chúng có liên quan chặt chẽ đến trình điều khiển cơ sở dữ liệu và nếu bạn muốn kiểm tra chúng thêm một chút, tôi khuyên bạn nên tra cứu tài liệu về trình điều khiển ở đây . Trong thư mục ứng dụng sng-demo, hãy tạo mô-đun db_operations.py. Đây là nơi đặt tất cả các lệnh liên quan đến cơ sở dữ liệu tùy chỉnh.
Thư mục sng_demosẽ trông như thế này:

sng_demo<font>
├── __init__.py<font>
├── db_operations.py<font>
└── database<font>
   ├── __init__.py<font>
   ├── memgraph.py<font>
   ├── connection.py<font>
   └── models.py<font>
</font></font></font></font></font></font></font></font>

Chúng tôi sẽ sử dụng một mô hình dữ liệu rất đơn giản có thể dễ dàng nâng cấp sau này.

Chỉ có một nút có nhãn Uservà mỗi nút Usercó hai thuộc tính, một số idvà một chuỗi name. Các nút được kết nối với các cạnh thuộc loại FRIENDS:

Cách hình dung một mạng xã hội bằng Python với cơ sở dữ liệu đồ thị: Flask + ...

Có một số phương pháp để điền vào cơ sở dữ liệu của chúng tôi ( nhiều hơn ở đây ) nhưng chúng tôi sẽ thực hiện theo cách thủ công bằng cách thực hiện các truy vấn openCypher để bạn có thể hiểu rõ hơn về cách giao tiếp với cơ sở dữ liệu. Bạn sẽ tìm thấy tất cả các truy vấn cần thiết để điền cơ sở dữ liệu vào các tệp data_big.txtdata_small.txt. Cái trước chỉ có một tập dữ liệu lớn hơn cái sau.

Trong thư mục gốc của dự án, hãy tạo một thư mục có tên resourcesvà đặt các tệp vào đó. Bây giờ bạn có thể thêm một phương thức nhập vào ứng dụng web của mình.

Trong mô-đun, hãy db_operations.pythêm nhập và phương thức sau:

import json

def clear(db):
  command = "MATCH (node) DETACH DELETE node"
  db.execute_query(command)

def populate_database(db, path):
  file = open(path)
  lines = file.readlines()
  file.close()
  for line in lines:
      if len(line.strip()) != 0 and line[0] != '/':
          db.execute_query(line)

Phương thức này clear()xóa mọi dữ liệu có thể còn sót lại trong cơ sở dữ liệu trước khi đưa nó vào.
Phương thức này populate_database()đọc tất cả các truy vấn openCypher trong tệp được chỉ định và thực thi chúng.

Trong mô-đun, app.pythay đổi nhập và phương thức index()thành:

from flask import Flask, render_template, request, jsonify, make_response
from sng_demo.database import Memgraph
from sng_demo import db_operations

app = Flask(__name__)


@app.route('/')
@app.route('/index')
def index():
    db = Memgraph()
    db_operations.clear(db)
    db_operations.populate_database(db, "resources/data_small.txt")
    return render_template('index.html')

Bây giờ mỗi khi chúng tôi làm mới trang chỉ mục của mình, cơ sở dữ liệu sẽ bị xóa và được tạo lại với dữ liệu mới. Mặc dù điều này không phù hợp với giai đoạn sản xuất, nhưng nó rất hữu ích trong quá trình phát triển vì nó sẽ cho phép chúng tôi thực hiện các thay đổi trong dữ liệu mà không cần phải khởi động lại toàn bộ ứng dụng hoặc làm việc trực tiếp trên cơ sở dữ liệu.

Nếu bạn muốn kiểm tra biểu đồ trước khi tiếp tục, tôi khuyên bạn nên mở Phòng thí nghiệm Memgraph và chạy truy vấn MATCH (n1)-[e:FRIENDS]-(n2) RETURN n1,n2,e;.

Kết quả sẽ là:

Cách hình dung một mạng xã hội bằng Python với cơ sở dữ liệu đồ thị: Flask + ...

Chúng tôi cũng cần một phương thức trong ứng dụng của mình để tìm nạp tất cả dữ liệu có liên quan từ cơ sở dữ liệu khi khách hàng yêu cầu.
Hãy gọi nó get_graph()và đặt nó vào db_operations.pymô-đun:

def get_graph(db):
   command = "MATCH (n1)-[e:FRIENDS]-(n2) RETURN n1,n2,e;"
   relationships = db.execute_and_fetch(command)
 
   link_objects = []
   node_objects = []
   added_nodes = []
   for relationship in relationships:
       e = relationship['e']
       data = {"source": e.nodes[0], "target": e.nodes[1]}
       link_objects.append(data)
 
       n1 = relationship['n1']
       if not (n1.id in added_nodes):
           data = {"id": n1.id, "name": n1.properties['name']}
           node_objects.append(data)
           added_nodes.append(n1.id)
 
       n2 = relationship['n2']
       if not (n2.id in added_nodes):
           data = {"id": n2.id, "name": n2.properties['name']}
           node_objects.append(data)
           added_nodes.append(n2.id)
   data = {"links": link_objects, "nodes": node_objects}
 
   return json.dumps(data)

Đầu tiên, chúng ta cần thực hiện truy vấn openCypherMATCH (n1)-[e:FRIENDS]-(n2) RETURN n1,n2,e; và trả về kết quả của nó từ cơ sở dữ liệu. Các kết quả này sẽ chứa tất cả các cạnh trong đồ thị cũng như tất cả các nút được kết nối với các cạnh đó. Các nút không có kết nối sẽ không được trả lại và điều đó là ổn cho đến bây giờ.

Các kết quả (đối tượng relationships) đang ở trong hình thức của một máy phát điện mà chúng tôi có thể lặp lại và truy cập vào nội dung của nó bằng cách sử dụng các nút / tên cạnh quy định trong truy vấn ban đầu của chúng tôi ( n1, n2e).

Chúng ta cũng cần kiểm tra xem một nút đã được thêm vào node_objectsdanh sách hay chưa, vì nhiều cạnh có thể chứa (trỏ đến hoặc từ) cùng một nút. Tất cả các đối tượng được lưu trữ trong các cặp khóa-giá trị phù hợp cho việc chuyển đổi JSON sau này.

Kết quả cuối cùng là một đối tượng JSON chứa:

  • links: tất cả các mối quan hệ có trong biểu đồ dưới dạng các cặp thuộc tính id sourcetarget.
  • nodes: tất cả các nút từ biểu đồ hình thành mối quan hệ với các nút khác.

Trong app.pymô-đun của bạn , hãy thêm phương thức sau:

@app.route("/get-graph", methods=["POST"])
def get_graph():
   db = Memgraph()
   response = make_response(
       jsonify(db_operations.get_graph(db)), 200)
   return response

Phương thức này chịu trách nhiệm phản hồi các yêu cầu POST từ máy khách. Nó trả về dữ liệu đồ thị mà chúng tôi đã tìm nạp từ máy chủ trong phương pháp trước đó.

Bây giờ chúng ta hãy làm điều gì đó với dữ liệu này! Sao chép nội dung cho index.jstệp của bạn từ đâystyle.csstệp từ đây .

Chúng tôi cũng cần thêm đồ họa SVG thực tế vào trang của mình, vì vậy hãy thay đổi index.htmltệp thành:

{% extends 'base.html' %} {% block content %}
<div class=""container"">
    <svg class=""border" rounded="" mt-3"="" width=""960"" height=""600"" style=""background-color:white""></svg>
</div>

{% endblock %}

Tôi sẽ không đi sâu vào chi tiết về cách sử dụng D3.js , vì vậy nếu bạn muốn tìm hiểu thêm, tôi khuyến khích bạn truy cập trang web của họ .

Nói tóm lại, chúng tôi tìm nạp tất cả các nút và cạnh từ cơ sở dữ liệu và thêm chúng vào một phần tử SVG. Biểu diễn trực quan của đồ thị được thực hiện bằng cách mô phỏng cách các lực vật lý tác động lên các hạt (điện tích và lực hấp dẫn). Bạn có thể kéo và thả các nút, di chuột qua chúng để xem giá trị của thuộc tính tên của chúng, phóng to và thu nhỏ biểu đồ và di chuyển đồ họa SVG.

Cách hình dung một mạng xã hội bằng Python với cơ sở dữ liệu đồ thị: Flask + ...

Chức năng bổ sung

Tiếp tục và sao chép tệp query.jsvào thư mục static/jsquery.htmlvào thư mục templates. Bạn có thể tìm thấy base.htmltệp cập nhật ở đây . Sao chép các phương pháp cần thiết từ db_operations.py mô-đun và app.py module.

Sau khi bạn thực hiện các thay đổi, chỉ cần mở http: // localhost: 5000 / query / và xem kết quả. 

Trang này sẽ giúp cuộc sống của bạn dễ dàng hơn nếu bạn muốn gỡ lỗi dữ liệu đang được tìm nạp từ máy chủ. Nó trả về tất cả các nút hoặc cạnh và hiển thị chúng ở định dạng được đánh dấu JSON.

Cách hình dung một mạng xã hội bằng Python với cơ sở dữ liệu đồ thị: Flask + ...

Cấu trúc dự án hiện tại của bạn sẽ như thế này:

sng-demo<font>
├── resources<font>
│  ├── data_big.py<font>
│  └── data_small.txt<font>
├── sng_demo<font>
│  ├── __init__.py<font>
│  ├── db_operations.py<font>
│  └── database<font>
│     ├── __init__.py<font>
│     ├── memgraph.py<font>
│     ├── connection.py<font>
│     └── models.py<font>
├── templates<font>
│  ├── base.html<font>
│  ├── index.html<font>
│  └── query.html<font>
├── static<font>
│   ├── css<font>
│   │  └── style.css<font>
│   └── js<font>
│      ├── index.js<font>
│      └── query.js<font>
├── app.py<font>
├── docker-compose.yml<font>
├── Dockerfile<font>
├── poetry.lock<font>
├── pyproject.toml<font>
└── start.sh<font>
</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>

Phần kết luận

Mặc dù cơ sở dữ liệu đồ thị đã xuất hiện từ lâu, chúng vẫn chưa được coi là một công cụ chủ đạo trong phát triển phần mềm. Hệ thống quản lý cơ sở dữ liệu quan hệ mô hình dữ liệu như một tập hợp các cấu trúc được xác định trước. Các phép nối phức tạp và tự nối là cần thiết khi tập dữ liệu trở nên quá liên quan với nhau. Các bộ dữ liệu hiện đại yêu cầu các truy vấn phức tạp về mặt kỹ thuật thường rất kém hiệu quả trong các kịch bản thời gian thực.

Cơ sở dữ liệu đồ thị cung cấp khả năng mô hình hóa và phân tích dữ liệu mạnh mẽ cho nhiều vấn đề trong thế giới thực như mạng xã hội, mối quan hệ kinh doanh, sự phụ thuộc, vận chuyển, hậu cần… và chúng đã được nhiều công ty công nghệ hàng đầu thế giới áp dụng. Với hướng dẫn này, tôi hy vọng sẽ làm sáng tỏ việc tích hợp cơ sở dữ liệu đồ thị trong quá trình phát triển của bạn dễ dàng như thế nào và tôi khuyến khích bạn nên tự mình thử.

Như tôi đã nói ở phần đầu, vui lòng hỏi chúng tôi bất kỳ câu hỏi nào về hướng dẫn này hoặc Bản ghi nhớ nói chung trên StackOverflow với thẻ memgraphdbhoặc trên diễn đàn chính thức của chúng tôi . Chúc may mắn với mã hóa của bạn!

Cách hình dung một mạng xã hội bằng Python với cơ sở dữ liệu đồ thị: Flask + ...

|