Neo4j-graafitietokantojen perusteet · Oppitunti

Transaktioiden ja istuntojen käsittely

Ymmärtäkää, miten transaktioita ja istuntoja hallitaan sovelluskoodissa vankkojen ja luotettavien tietokantatoimintojen toteuttamiseksi.

Oppitunti 3/411 vaihetta

Transaktioiden ja istuntojen käsittely on ilmainen Neo4j-graafitietokantojen perusteet-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Neo4j-graafitietokantojen perusteet-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Neo4j-graafitietokantojen perusteet-kurssilla on yhteensä 4 oppituntia.

Miksi transaktiot ovat tärkeitä

Kun päivitätte tietoja tietokannassa, erityisesti kriittisiä tietoja, haluatte varmistaa operaation luotettavuuden. Tässä transaktiot tulevat avuksi.

Transaktiot auttavat säilyttämään tietojen eheyden ja yhdenmukaisuuden, vaikka operaation aikana tapahtuisi jotain odottamatonta.

Transaktioiden ymmärtäminen

Transaktio on yksi looginen työyksikkö. Se on operaatioiden sarja, joka suoritetaan yhtenä atomisena operaationa.

Ajatelkaa esimerkiksi rahansiirtoa pankkitilien välillä: joko veloitus ja hyvitys tehdään molemmat tai kumpaakaan ei tehdä. Ette varmasti haluaisi rahaa poistettavan yhdeltä tililtä ilman, että se saapuu toiselle!

ACID-testi

Transaktioita kuvataan usein niiden ACID-ominaisuuksien avulla:

  • Atomisuus: Kaikki tai ei mitään. Koko transaktio joko onnistuu tai mikään sen osa ei onnistu.
  • Yhdenmukaisuus: Varmistaa, että tietokanta siirtyy yhdestä kelvollisesta tilasta toiseen.
  • Eristäminen: Samanaikaiset transaktiot eivät häiritse toisiaan.
  • Pysyvyys: Kun transaktio on vahvistettu, sen muutokset ovat pysyviä.

Yhteyden muodostaminen sessioilla

Neo4j:ssä tietokannan kanssa ollaan vuorovaikutuksessa sessioiden avulla. Sessio hallinnoi viestintäkanavaa ja tarjoaa metodit Cypher-kyselyiden suorittamiseen.

Sessionit ovat kevyitä, ja ne on suunniteltu avattaviksi ja suljettaviksi usein. Ne ovat ensisijainen rajapintanne kyselyiden suorittamiseen, myös transaktioiden sisällä.

Session perusluku

Yksinkertaisissa lukutoiminnoissa ette yleensä tarvitse eksplisiittistä transaktioiden hallintaa. Neo4j-ajuri huolehtii siitä puolestanne lukutransaktion avulla.

Näin haette solmujen määrän session avulla:

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()

Eksplisiittiset kirjoitustransaktiot

Tietokantaa muokkaavissa operaatioissa, kuten CREATE-, MERGE-, SET- ja DELETE-operaatioissa, on suositeltavaa käyttää eksplisiittisiä kirjoitustransaktioita. Tämä varmistaa atomisuuden.

write_transaction-metodi huolehtii automaattisesti vahvistamisesta onnistumisen yhteydessä tai palautuksesta virheen tapahtuessa.

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()

Vahvistus vai palautus?

Kun käytätte eksplisiittisiä transaktioita, muutoksia ei tallenneta pysyvästi ennen kuin vahvistatte transaktion. Jos tapahtuu virhe, transaktio palautetaan, jolloin kaikki muutokset kumotaan.

session.write_transaction()- ja session.read_transaction()-metodit hoitavat tämän puolestanne implisiittisesti. Jos niille välitetty funktio suoritetaan ilman virheitä, transaktio vahvistetaan. Jos syntyy poikkeus, se palautetaan.

Vankka virheenkäsittely

Virheiden käsittely transaktiologiikassa on ratkaisevan tärkeää. Käsittelemätön poikkeus palauttaa transaktion ja estää osittaiset päivitykset.

Voitte käyttää transaktiofunktiossanne Pythonin tavallisia try...except-lohkoja tiettyjen virheiden käsittelyyn tai siivoustoimien suorittamiseen.

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()

Python-tyyliset kontekstinhallitsijat

Jos tarvitsette vielä tarkempaa hallintaa tai suoritatte useita operaatioita yhden transaktion sisällä, voitte käyttää sessiota kontekstinhallitsijana ja hallita transaktio-oliota eksplisiittisesti.

session.begin_transaction()-metodi palauttaa transaktio-olion, joka toimii myös kontekstinhallitsijana.

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()

Transaktiohaaste

Oletetaan, että päivitätte Neo4j:ssä yhden solmun kahta ominaisuutta Python-sovelluksessa. Jos toinen päivitys epäonnistuu verkkovirheen vuoksi, mitä ensimmäiselle päivitykselle pitäisi tapahtua, jos se kuului samaan eksplisiittiseen kirjoitustransaktioon?

Kertaus ja seuraavat vaiheet

Olemme käsitelleet transaktioiden ratkaisevaa roolia tietojen eheyden ja yhdenmukaisuuden ylläpitämisessä Neo4j-sovelluksissanne.

  • Transaktiot noudattavat ACID-ominaisuuksia.
  • Käytätte sessioita tietokannan kanssa toimimiseen.
  • session.read_transaction() ja session.write_transaction() tarjoavat kätevät atomiset operaatiot.
  • Transaktion sisäiset virheet käynnistävät automaattisen palautuksen, joten osittaisia tietoja ei vahvisteta.
  • Kontekstinhallitsijat tarjoavat Python-tyylisen tavan hallita sessioita ja transaktioita.

Transaktioiden ymmärtäminen on keskeistä vankkojen ja luotettavien Neo4j-sovellusten rakentamisessa!

Aloita maksutta

Opi Neo4j-graafitietokantojen perusteet tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Transaktioiden ja istuntojen käsittely” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Neo4j-graafitietokantojen perusteet-oppimispolun 3 oppituntia, myös oppitunnin “Transaktioiden ja istuntojen käsittely”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Neo4j-graafitietokantojen perusteet-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Transaktioiden ja istuntojen käsittely”?

Ymmärtäkää, miten transaktioita ja istuntoja hallitaan sovelluskoodissa vankkojen ja luotettavien tietokantatoimintojen toteuttamiseksi. Harjoittelet Neo4j-graafitietokantojen perusteet-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Neo4j-graafitietokantojen perusteet-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Neo4j-graafitietokantojen perusteet-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Transaktioiden ja istuntojen käsittely”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Neo4j-graafitietokantojen perusteet-oppitunnilla?

Kyllä. Jokainen Neo4j-graafitietokantojen perusteet-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yhdistäminen Python-ohjaimella
  2. CRUD-toimintojen suorittaminen ohjelmallisesti
  3. Transaktioiden ja istuntojen käsittely
  4. Yhteyspoolit ja virheenkäsittely
← Takaisin: Neo4j-graafitietokantojen perusteet