Driver de baza de date Laravel pentru Google Cloud Spanner

Cerinte

  • PHP> = 7.1
  • Laravel> = 5,5
  • extensie gRPC
  • extensie protobuf (nu este necesara, dar este foarte recomandata)

Instalare

Puneti calea fisierului de acreditare JSON la variabila env: GOOGLE_APPLICATION_CREDENTIALS

exportati GOOGLE_APPLICATION_CREDENTIALS = / cale / catre / cheie.json

Instalati prin compozitor

compozitor necesita colopl / laravel-spanner

Adaugati config de conexiune la config / database.php

[‘connections’ => [‘spanner’ => [‘driver’ => ‘spanner’, ‘instance’ => ‘<Cloud Spanner instanceId here>’, ‘database’ => ‘<Numele bazei de date Cloud Spanner aici>’ ,]]];

Asta e tot. Puteti utiliza conexiunea la baza de date ca de obicei.

$ conn = DB :: connection (‘cheie’); $ conn -> …

Configurari suplimentare

Puteti trece optiunile de configurare SpannerClient si CacheSessionPool dupa cum urmeaza. Pentru mai multe informatii, consultati documentele Bibliotecii client Google

[‘connections’ => [‘spanner’ => [‘driver’ => ‘spanner’, ‘instance’ => ‘<Cloud Spanner instanceId here>’, ‘database’ => ‘<numele bazei de date Cloud Spanner aici>’ , // Spanner Client configurations ‘client’ => [‘projectId’ => ‘xxx’, …], // CacheSessionPool options ‘session_pool’ => [‘minSessions’ => 10, ‘maxSessions’ => 500, ],]]];

Functii neacceptate

  • Tipuri de date STRUCT
  • Tranzactie explicita numai in citire (instantaneu)

Limitari

Migratii

Cele mai multe functii ale SchemaBuilder (de exemplu, Schema fatada si Blueprint) pot fi utilizate. Cu toate acestea, comanda de migrare artizanala nu functioneaza, deoarece AUTO_INCREMENT nu exista in Google Cloud Spanner.

Elocvent

Majoritatea functiilor Eloquent pot fi utilizate. Cu toate acestea, unele functii nu sunt disponibile. De exemplu, relatia de apartenenta la multe nu este disponibila.

Daca utilizati chei intercalate, TREBUIE sa le definiti in proprietatea interleaveKeys sau nu veti putea salva. Pentru instructiuni mai detaliate, consultati Colopl \ Spanner \ Tests \ Eloquent \ ModelTest.

Informatii suplimentare

Tranzactii

Google Cloud Spanner solicita uneori reincercari ale tranzactiilor (de exemplu, NEDISPONIBIL si ABORTAT), chiar daca logica este corecta. Din acest motiv, va rugam sa nu gestionati manual tranzactiile.

Ar trebui sa utilizati intotdeauna metoda tranzactiei care gestioneaza cererile de reincercare intern.

// RAU: Nu utilizati tranzactiile manual !! incercati {DB :: beginTransaction (); … DB :: commit (); } catch (\ Throwable $ ex) {DB :: rollBack (); } // BINE: ar trebui sa utilizati intotdeauna metoda tranzactiei DB :: transaction (function () {…});

Google Cloud Spanner creeaza tranzactii pentru toate operatiunile de date, chiar daca nu creati in mod explicit tranzactii.

In special, in declaratia SELECT, tipul tranzactiei variaza in functie de faptul ca este explicit sau implicit.

// tranzactie implicita (tranzactie numai citire) $ conn-> select (‘SELECT …’); // tranzactie explicita (tranzactie citire-scriere) $ conn-> tranzactie (functie () {$ conn-> select (‘SELECT .

fontanero cachondo videos porno corridas
porno agresivo sex porne
follando española videosdeincesto
ver peliculas porno italianas madura española con joven
zoofila porno agresivo
follando con mirones hentai scat
supertetas colegialas cachondas
hentai scat penes de abuelos
defloin.com creampie abuelas
jovenes españolas follando española folla
superculos escuchar relatos porno
abuela enculada corrida boca
follando abuelas corridas internas peludas
maduritas corriendose como folla mi vecina
trio amateur español pornotrans
concursos nudistas sexo con viejas
mi vecina desnuda videos porno casero españa
videos porno online miakalifa
porno viejas alemanas porno gay chino
correte dentro porno viola a su madre

..’);}); // tranzactie implicita (tranzactie citire-scriere) $ conn-> insert (‘INSERT …’); // tranzactie explicita (tranzactie citire-scriere) $ conn-> transaction (function () {$ conn-> insert (‘INSERT …’);});

Tip tranzactie SELECT declaratie INSERT / UPDATE / delete declaratie tranzactie implicita numai in citire tranzactie cu singleUse optiunea de citire-scriere tranzactie cu singleUse optiune de tranzactie explicita de citire-scriere tranzactie de citire-scriere tranzactie

Pentru mai multe informatii, consultati Documentatia Cloud Spanner despre tranzactii

Citeste vechi

Puteti utiliza citirile invechite (limite de marcaj de timp) dupa cum urmeaza.

// Exista patru tipuri de limite de timestamp: ExactStaleness, MaxStaleness, MinReadTimestamp si ReadTimestamp. $ timestampBound = new ExactStaleness (10); // prin Connection $ connection-> selectWithTimestampBound (‘SELECT …’, $ bindings, $ timestampBound); // de Query Builder $ queryBuilder -> withStaleness ($ timestampBound) -> get ();

Citirile vechi ruleaza intotdeauna ca tranzactie numai in citire cu optiunea singleUse. Deci nu puteti rula ca tranzactie de citire-scriere.

Tipuri de date

Unele tipuri de date din Google Cloud Spanner nu au un tip de PHP incorporat corespunzator. Puteti utiliza urmatoarele clase de Google Cloud PHP Client

  • DATA: Google \ Cloud \ Spanner \ Date
  • BYTES: Google \ Cloud \ Spanner \ Bytes
  • TIMESTAMP: Google \ Cloud \ Spanner \ Timestamp

Google \ Cloud \ Spanner \ Timestamp este o reprezentare DateTime cu fus orar UTC si nanosecunde. In laravel-spanner QueryBuilder converteste Timestamp in randurile preluate in Carbon cu fusul orar implicit in PHP.

Retineti ca, daca executati o interogare fara QueryBuilder, aceasta nu va avea o conversie in carbon.

DML partitionat

Puteti rula DML partitionat dupa cum urmeaza.

// prin Connection $ connection-> runPartitionedDml (‘UPDATE …’); // de Query Builder $ queryBuilder-> partitionedUpdate ($ valori); $ queryBuilder-> partitionedDelete ($ valori);

Cu toate acestea, DML partitionat are unele limitari. Consultati Documentatia Cloud Spanner despre DML partitionat pentru mai multe informatii.

Interleave

Puteti defini tabelele intercalate dupa cum urmeaza.

$ schemaBuilder-> create (‘user_items’, function (Blueprint $ table) {$ table-> uuid (‘user_id’); $ table-> uuid (‘id’); $ table-> uuid (‘item_id’); $ table-> integer (‘count’); $ table-> timestamps (); $ table-> principal ([‘user_id’, ‘id’]); // tabel interleaved $ table-> interleave (‘utilizatori’) -> onDelete (‘cascada’); // index intercalat $ tabel-> index ([‘userId’, ‘created_at’]) -> interleave (‘utilizatori’);});

Mutatii

Puteti insera, actualiza si sterge date folosind mutatii pentru a modifica datele in loc sa utilizati DML pentru a imbunatati performanta.

$ queryBuilder-> insertUsingMutation ($ valori); $ queryBuilder-> updateUsingMutation ($ valori); $ queryBuilder-> deleteUsingMutation ($ valori);

Va rugam sa retineti ca API-ul mutatiei nu functioneaza la fel ca DML. Toate apelurile de mutatie din cadrul unei tranzactii sunt puse in coada si trimise ca lot in momentul efectuarii angajarii. Aceasta inseamna ca, daca faceti modificari prin functiile de mai sus si apoi incercati sa selectati aceleasi inregistrari inainte de a comite, rezultatele returnate nu vor include niciuna dintre modificarile pe care le-ati facut in cadrul tranzactiei.

SessionPool si AuthCache

Pentru a imbunatati performanta primei conexiuni pe cerere, folosim AuthCache si CacheSessionPool.

In mod implicit, laravel-spanner foloseste adaptorul de cache pentru sistem de fisiere ca grup de stocare in cache. Daca doriti sa utilizati propriul pool de cache, puteti extinde ServiceProvider si il puteti injecta in constructorul Colopl \ Spanner \ Connection.

Laravel Tinker

Puteti utiliza Laravel Tinker cu comenzi precum php artisan tinker. Dar sesiunea dvs. se poate bloca cand accesati Cloud Spanner. Este cunoscuta aceasta problema gRPC care apare atunci cand PHP bifurca un proces. Solutia este sa adaugati urmatoarea linie la php.ini.

grpc.enable_fork_support = 1

Dezvoltare

Testarea

Puteti rula teste pe docker prin urmatoarea comanda. Retineti ca unele variabile de mediu trebuie setate. Pentru a seta variabilele, redenumiti .env.sample la .env si editati valorile variabilelor definite.

Denumire valoare GOOGLE_APPLICATION_CREDENTIALS Calea fisierului cheie de cont de serviciu cu privilegiu de acces la instanta Google Cloud Spanner DB_SPANNER_INSTANCE_ID ID-ul instantei Google Cloud Spanner DB_SPANNER_DATABASE_ID Numele bazei de date cu in instanta Google Cloud Spanner DB_SPANNER_PROJECT_ID Nu este necesar, daca ID-ul dvs. include identificarea, daca ID-ul dvs. este necesar

Licenta

Apache 2.0 – Consultati LICENTA pentru mai multe informatii.