UNPKG

andresusandi-storage

Version:

storage utilities for distributed systems

59 lines (49 loc) 2.23 kB
const { Bigtable } = require('@google-cloud/bigtable'); const { name: packageName } = require('./package.json'); class GoogleBigTableStorage { constructor(name, projectId, keyFilename, instanceName) { const bt = new Bigtable({ projectId, keyFilename }); this.instance = bt.instance(instanceName); this.bigtable; this.name = name; this.instanceName = instanceName; console.log(`${packageName}/${this.constructor.name}: Creating Google BigTable ${name} in instance ${instanceName}`); } async init() { if (!(await this.instance.exists())) await this.instance.create(); this.bigtable = this.instance.table(this.name); console.log(`${packageName}/${this.constructor.name}: Initialized ${this.name}`); } async save(key, value) { console.log(`${packageName}/${this.constructor.name}: Saving item with key ${key} and value ${JSON.stringify(value)}`); await this.bigtable.insert({ key, data: value }); } async get(key) { console.log(`${packageName}/${this.constructor.name}: Retrieving item with key ${key}`); var item = await this.bigtable.row(key).get(); return (item); } async delete(key) { console.log(`${packageName}/${this.constructor.name}: Deleting item with key ${key}`); await this.bigtable.row(key).delete(); } async getAllItems() { console.log(`${packageName}/${this.constructor.name}: Getting all items`); const entities = await this.bigtable.getRows(); // var [entities, info] = await this.datastore.runQuery(query); // while (info.moreResults !== Datastore.NO_MORE_RESULTS) { // query = query.start(info.endCursor); // const [moreEntities, moreInfo] = await this.datastore.runQuery(query); // entities = entities.concat(moreEntities); // info = moreInfo; // } for (var i = 0; i < entities.length; i++) { entities[i].__key__ = entities[i].key; entities[i].value = entities[i].data; delete entities[i].data; } return entities; } } module.exports = GoogleBigTableStorage;