Asas Pangkalan Data Graf Neo4j · Pelajaran

Mengendalikan Transaksi dan Sesi

Fahami cara mengurus transaksi dan sesi dalam kod aplikasi anda untuk interaksi pangkalan data yang kukuh dan boleh dipercayai.

Pelajaran 3 daripada 411 langkah

Mengendalikan Transaksi dan Sesi ialah pelajaran Asas Pangkalan Data Graf Neo4j percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Asas Pangkalan Data Graf Neo4j, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Asas Pangkalan Data Graf Neo4j merangkumi sejumlah 4 pelajaran.

Mengapa Transaksi Penting

Apabila anda mengemas kini data dalam pangkalan data, terutamanya maklumat penting, anda perlu memastikan operasi itu boleh dipercayai. Di sinilah transaksi diperlukan.

Transaksi membantu mengekalkan integriti dan ketekalan data, walaupun sesuatu yang tidak dijangka berlaku semasa operasi.

Memahami Transaksi

Transaksi ialah satu unit kerja yang logik. Ia merupakan urutan operasi yang dilaksanakan sebagai satu operasi atom.

Bayangkan pemindahan wang antara akaun bank: sama ada debit dan kredit kedua-duanya berlaku, atau kedua-duanya tidak berlaku. Anda tentu tidak mahu wang keluar daripada satu akaun tanpa masuk ke akaun yang lain!

Ujian ACID

Transaksi sering dihuraikan melalui sifat ACID:

  • Keatomikan: Semua atau tiada satu pun. Sama ada keseluruhan transaksi berjaya, atau tiada bahagiannya yang berjaya.
  • Ketekalan: Memastikan pangkalan data berubah daripada satu keadaan yang sah kepada keadaan sah yang lain.
  • Pengasingan: Transaksi serentak tidak mengganggu satu sama lain.
  • Kekekalan: Setelah transaksi dilakukan, perubahannya kekal.

Menyambung dengan Sesi

Dalam Neo4j, anda berinteraksi dengan pangkalan data menggunakan sesi. Sesi mengurus saluran komunikasi dan menyediakan kaedah untuk melaksanakan pertanyaan Cypher.

Sesi adalah ringan dan direka bentuk untuk dibuka serta ditutup dengan kerap. Sesi ialah antara muka utama anda untuk menjalankan pertanyaan, termasuk pertanyaan dalam transaksi.

Bacaan Asas melalui Sesi

Untuk operasi bacaan mudah, anda biasanya tidak perlu mengurus transaksi secara eksplisit. Pemacu Neo4j mengendalikannya untuk anda melalui transaksi bacaan.

Berikut ialah cara mendapatkan bilangan nod menggunakan sesi:

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

def get_node_count(tx):
    result = tx.run("MATCH (n) RETURN count(n) AS count")
    return result.single()["count"]

with driver.session() as session:
    count = session.read_transaction(get_node_count)
    print(f"Total nodes in graph: {count}")

driver.close()

Transaksi Tulis Eksplisit

Untuk operasi yang mengubah pangkalan data seperti CREATE, MERGE, SET dan DELETE, amalan terbaik adalah menggunakan transaksi tulis eksplisit. Ini memastikan keatomikan.

Kaedah write_transaction mengendalikan pengesahan secara automatik jika berjaya, atau membuat asal perubahan jika berlaku ralat.

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

def create_person(tx, name):
    tx.run("CREATE (p:Person {name: $name})", name=name)
    print(f"Created Person: {name}")

with driver.session() as session:
    session.write_transaction(create_person, "Alice")
    session.write_transaction(create_person, "Bob")

driver.close()

Lakukan atau Buat Asal?

Apabila menggunakan transaksi eksplisit, perubahan anda tidak disimpan secara kekal sehingga anda mengesahkannya. Jika berlaku ralat, transaksi akan dibuat asal, lalu membatalkan semua perubahan.

Kaedah session.write_transaction() dan session.read_transaction() mengendalikan proses ini secara tersirat untuk anda. Jika fungsi yang dihantar kepadanya selesai tanpa ralat, transaksi akan disahkan. Jika pengecualian dicetuskan, transaksi akan dibuat asal.

Pengendalian Ralat yang Kukuh

Pengendalian ralat dalam logik transaksi amat penting. Sebarang pengecualian yang tidak dikendalikan akan menyebabkan transaksi dibuat asal, sekali gus menghalang kemas kini separa.

Anda boleh menggunakan blok Python standard try...except dalam fungsi transaksi untuk mengurus ralat tertentu atau melakukan pembersihan.

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

def create_unique_node(tx, label, name):
    try:
        # Attempt to create a node. For demo, we'll re-raise to show rollback
        tx.run(f"CREATE (n:{label} {{name: $name}})", name=name)
        print(f"Node created: {name}")
    except Exception as e:
        print(f"Error creating node {name}: {e}")
        # Re-raise to trigger rollback for the entire write_transaction
        raise 

with driver.session() as session:
    # First call will likely succeed (unless node exists)
    try:
        session.write_transaction(create_unique_node, "City", "London")
    except Exception:
        print("Transaction for 'London' rolled back due to error.")

    # Second call, intentionally designed to fail for demonstration
    # (e.g., if we had a unique constraint on City.name)
    try:
        # Forcing an error to demonstrate rollback
        def force_error(tx):
            tx.run("CREATE (x)")
            raise ValueError("Simulated error!")
        session.write_transaction(force_error)
    except Exception:
        print("Transaction rolled back due to simulated error.")

driver.close()

Pengurus Konteks Pythonik

Untuk kawalan yang lebih terperinci, atau apabila melaksanakan beberapa operasi dalam satu transaksi, anda boleh menggunakan sesi sebagai pengurus konteks dan mengurus objek transaksi secara eksplisit.

Kaedah session.begin_transaction() mengembalikan objek transaksi yang juga berfungsi sebagai pengurus konteks.

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

with driver.session() as session:
    with session.begin_transaction() as tx:
        tx.run("CREATE (a:Item {id: 1, name: 'Laptop'})")
        tx.run("CREATE (b:Item {id: 2, name: 'Mouse'})")
        # If no error, transaction commits automatically here when 'with tx' block exits
        print("Two items created in one transaction.")

driver.close()

Cabaran Transaksi

Bayangkan anda sedang mengemas kini dua sifat bagi satu nod dalam Neo4j melalui aplikasi Python. Jika kemas kini kedua gagal disebabkan ralat rangkaian, apakah yang sepatutnya berlaku pada kemas kini pertama jika kedua-duanya merupakan sebahagian daripada transaksi tulis eksplisit yang sama?

Imbas Kembali & Langkah Seterusnya

Kami telah membincangkan peranan penting transaksi dalam mengekalkan integriti dan ketekalan data dalam aplikasi Neo4j anda.

  • Transaksi mematuhi sifat ACID.
  • Anda menggunakan sesi untuk berinteraksi dengan pangkalan data.
  • session.read_transaction() dan session.write_transaction() menyediakan operasi atom yang mudah digunakan.
  • Ralat dalam transaksi menyebabkan pembatalan secara automatik, sekali gus memastikan tiada data separa disahkan.
  • Pengurus konteks menyediakan cara Pythonik untuk mengurus sesi dan transaksi.

Memahami transaksi ialah kunci untuk membina aplikasi Neo4j yang kukuh dan boleh dipercayai!

Percuma untuk bermula

Pelajari Asas Pangkalan Data Graf Neo4j dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Mengendalikan Transaksi dan Sesi” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Asas Pangkalan Data Graf Neo4j, termasuk “Mengendalikan Transaksi dan Sesi”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Asas Pangkalan Data Graf Neo4j merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Mengendalikan Transaksi dan Sesi”?

Fahami cara mengurus transaksi dan sesi dalam kod aplikasi anda untuk interaksi pangkalan data yang kukuh dan boleh dipercayai. Anda berlatih Asas Pangkalan Data Graf Neo4j menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Asas Pangkalan Data Graf Neo4j?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Asas Pangkalan Data Graf Neo4j di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Mengendalikan Transaksi dan Sesi” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Asas Pangkalan Data Graf Neo4j ini?

Ya. Setiap pelajaran Asas Pangkalan Data Graf Neo4j menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menyambung dengan Pemacu Python
  2. Melaksanakan Operasi CRUD secara Terprogram
  3. Mengendalikan Transaksi dan Sesi
  4. Pengumpulan Sambungan dan Pengendalian Ralat
← Kembali ke Asas Pangkalan Data Graf Neo4j