andresusandi-storage
Version:
storage utilities for distributed systems
59 lines (49 loc) • 2.23 kB
JavaScript
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;