Kuinka käyttää Google Sheets tietokantana (vastuullisesti)

vaikka tietokantateknologia ja muut työkalut ovat edistyneet pitkälle, on silti vaikea päihittää nöyrän laskentataulukon monipuolisuus ja intuitiivisuus. Vaikka niitä käytetään herkkiin, kriittisiin sovelluksiin, kuten COVID-19-potilastietojen tallentamiseen, on epäviisasta, se, että jokainen osaa käyttää taulukkolaskentaa, tarkoittaa, että ne ovat hyviä pienemmissä poikkitoiminnallisissa projekteissa, joissa ei-Kehittäjä saattaa joutua tutkimaan tai muokkaamaan tietoja.

tässä oppaassa näytän, miten Google Sheetsiä käytetään tietokantana, jossa on API-käyttöliittymä, joka on saatavilla HTTP: n kautta. Käytämme Autokoodia, solmua.js API – kehitysalusta ja editori sisäänrakennetulla automaattisella täydennyksellä yksinkertaisen sovelluksen käyttöönottoon ja Googlen todennusprosessin hoitamiseen. Aion myös tutkia rajoituksia Google Sheets, kuten skaalautuvuus, ja missä on järkevää alkaa tarkastella monimutkaisempia vaihtoehtoja.

# Returns all people in the database whose names start # with "bil", case-insensitive$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'

et tarvitse aloittaaksesi muuta kuin Google-tilin ja ilmaisen Autocode-tilin. Mennään!

ensin sinun täytyy kloonata oma kopio Google Sheet-mallista klikkaamalla tästä ja painamalla sitten Use Template oikeassa yläkulmassa. Tämä lisää näytteen laskentataulukon henkilökohtaiseen Google-tiliisi.

kun olet tehnyt sen, klikkaa tästä avataksesi aloitussovelluksen Autocodessa. Tutustu lähdekoodiin halutessasi ja asenna sovellus Autocode-tilillesi painamalla vihreää painiketta. Kun pyydetään linkittämään Google Sheet, seuraa ohjeita virtaus linkittää Google-tilin, valitse laskentataulukko juuri kloonattu.

sen jälkeen sovelluksen pitäisi olla valmis! Kokeile käyttää muutamia päätepisteitä niiden URL-osoitteiden kautta ja katso, mitä palautetaan / mitä tapahtuu uudelle taulukkolaskentatietokannallesi. Voit katsoa Endpoints alta esimerkiksi puhelut.

rajoitukset

että tl;dr oli helppo, eikö? Joten miksi kaikki ei ole rakennettu Google Sheets?

vaikka taustaosa, joka kestää 30 sekuntia ja jonka kanssa jokainen voi olla vuorovaikutuksessa, on erittäin houkutteleva, on joitakin ilmeisiä rajoituksia. Taulukkolaskenta tietokantana edellä kuvatulla tavalla ei luonnollisesti tue useita taulukoita tai rivien välisiä suhteita. Ei ole myöskään käsitettä valvoa tyyppejä tietyn sarakkeen, tapahtumien, sisäänrakennettujen varmuuskopioiden tai salauksen, joten arkaluonteiset / kriittiset tiedot (kuten COVID-19-potilastiedot) on luultavasti paras tallentaa muualle.

skaalautuvuuden kannalta Google Sheetsin kova raja on 5 000 000 solua (mukaan lukien tyhjät solut). Kun yritin todentaa tämän luomalla laskentataulukon, jossa oli niin monta arvoa, törmäsin kuitenkin merkittäviin ongelmiin suorituskyvyssä ennen tuota kynnystä:

Massaoperaatiot kuten suuren määrän liittäminen hidastui, sitten alkoi epäonnistua noin 1m soluissa. Suunnistus oli yleensä vaisua.

kokeiluni API-puheluiden tekemisen ympärillä tuottivat samanlaisia tuloksia. Kyselynopeus näytti skaalautuvan lineaarisesti solujen lukumäärällä:

kyselyt tulivat epäkäytännöllisen hitaiksi 500 000 solun merkin tuntumassa, mutta jäivät silti alle 2 sekunnin 100 000 solun kyselyssä. Siksi, jos ennakoida aineisto suurempi kuin muutama sata tuhatta solua, se olisi todennäköisesti fiksu valita skaalautuva vaihtoehto.

miten se toimii

kun linkität kloonatun Google Sheet-sovelluksen sovellukseesi ja asennat sen tilillesi, Autocode hoitaa automaattisesti tunnistautumisen sovelluksen ja Google-tilin välillä käyttämällä sovelluksen tokenia (katso const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN}) rivi kaikkien päätepisteiden yläosassa).

varsinaisissa kyselyissä jokainen päätepiste sisältää solmun.JS-koodi, joka kutsuu menetelmää googlesheetsistä.kyselyrajapinta. Nämä sovellusliittymät ottavat parametrin nimeltä range muotoiltuna A1-merkintänä, joka vastaa laskentataulukon osaa, jota API-puhelun tulisi pitää osana tietokantaa.

let queryResult = await lib.googlesheets.query.select({ range: `A:E`, bounds: 'FULL_RANGE', where: });

a range arvo A:E on lähinnä lyhenne sanoista ”käytä taulukkolaskennan kaikkia sarakkeiden A-E rivejä tietokantanani”. Kysely tulkitsee kunkin sarakkeen ensimmäisen rivin kyseisen sarakkeen arvojen kentän nimenä. Kun otetaan huomioon kloonaamasi malli, yllä oleva kysely tarkistaa kaikki arvot a-sarakkeesta (nimetty Name) riveille, joiden arvo vastaa kyselyä.

nämä API-puhelut käyttävät KeyQL-kyselykieltä. Jos syväsukellus kiinnostaa, voit tarkistaa siitä lisää esimerkkejä.

puhelut päätepisteisiin

kuten aiemmin mainittiin, nämä päätepisteet ovat käytettävissä HTTP: n kautta, joten voit soittaa niihin fetchcURL tai minkä tahansa muun HTTP-asiakkaan kautta. Voit käyttää verkkoselainta suoraan:

ja voit jopa käyttää samaa lib-node-Solmupakettia, jota päätepisteet käyttävät Google Sheets-sovellusliittymiin:

päätepisteesi vastaavat joko GET-tai POST-pyyntöihin. Parametrit jäsennetään QUERYSTRING for GET requests ja pyynnön elin POST requests. Kunkin päätepisteen oletusparametrit on asetettu selkeyden vuoksi. Alla on esimerkkejä jokaisesta päätepisteestä.

päätepisteet

functions/select/job / contains.js

tämä päätetapahtuma on esimerkki contains KeyQL-kysely. Se etsii rivejä linkitetystä Google Sheetistä, jossa Job kenttä sisältää parametria queryvastaavan substraatin (kirjainkokoherkkä). Näytearkista se palaa:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/job/contains/?query=ist'

functions/select/born_on / date_gt.js

tämä päätetapahtuma on esimerkki date_gt KeyQL-kyselystä. Se etsii rivejä linkitetystä Google Sheetistä, jossa Born On kenttä on query parametri muotoiltuna 2000/01/01. Näytearkista se palaa:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/born_on/date_gt/?query=2000/01/01'

functions/select/name / istartswith.js

tämä päätetapahtuma on esimerkki istartswith KeyQL-kysely. Se etsii rivejä linkitetystä Google Sheetistä, jossa Name kenttä alkaa query parametri (kirjainherkkä). Näytearkilta se palaa:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/select/name/istartswith/?query=bil'

funktiot / insert.js

tämä päätepiste on esimerkki inserttikyselystä. Se siirtää syöttöparametrit googlesheetsin fieldsets – parametriin.kysely.lisää
API. Esimerkiksi Bill Gates taulukkolaskentaan voi tehdä seuraavan pyynnön (kaikki parametrit ovat pienaakkosia):

$ curl --request POST \ --header "Content-Type: application/json" \ --data '{"name":"Bill Gates","job":"CEO","fictional":false,"bornOn":"10/28/1955"}' \ --url 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/insert/'

Huomautus: Autocode-sovellusliittymät eivät vastaa yksinomaan yhteen HTTP-menetelmään yli toisen, vaan käyttävät kuvailevaa nimeämistä välttääkseen sekaannukset toiminnallisuudesta.

toiminnot / päivitys.js

tämä päätetapahtuma on esimerkki päivityskyselystä. Se asettaa Updated At kentän ihmisistä, joiden nimet vastaavat täsmälleen name parametria, ja päivittää muita kenttiä syöttöparametrien perusteella. Se käyttää googlelehtiä.kysely.Päivitä API.
esimerkiksi JobBilbo BagginsRing Bearer taulukkolaskennassa voi tehdä seuraavan pyynnön (kaikki parametrit ovat pienaakkosia):

$ curl --request POST \ --header "Content-Type: application/json" \ --data '{"name":"Bilbo Baggins","job":"Ring Bearer"}' \ --url 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/update/'

huomautus: Tämä voi vaikuttaa useampaan riviin, jos useampi kuin yksi rivi vastaa kyselyn ehtoja.

funktiot / delete.js

tämä päätepiste on esimerkki poistokyselystä. Se poistaa rivit
ihmisistä, joiden nimet vastaavat täsmälleen name parametria. Se käyttää googlelehtiä.kysely.poista API. Jos haluat esimerkiksi poistaa Bilbo Baggins laskentataulukostasi, voit tehdä seuraavan pyynnön:

$ curl --request GET --url \ 'https://YOUR_USERNAME.api.stdlib.com/gsheets-database-example/delete/?name=Bilbo%20Baggins'

huomautus: Tämä voi vaikuttaa useampaan riviin, jos useampi kuin yksi rivi vastaa kyselyn ehtoja.

Kiitos!

Jos sinulla on kysyttävää tai palautetta, kannattaa liittyä Autocode-yhteisön Slack-kanavalle. Voit saada kutsun yhteisön välilehdeltä sivuston yläpalkissa. Voit myös ottaa minuun yhteyttä suoraan Twitterissä @Hacubu.

Jos haluat pysyä ajan tasalla Autocodesta, voit seurata @AutocodeHQ. Hauskaa hakkerointia!

Vastaa

Sähköpostiosoitettasi ei julkaista.