Skip to content

Instantly share code, notes, and snippets.

@MuhammadJamaluddin
Created June 6, 2019 00:36
Show Gist options
  • Save MuhammadJamaluddin/1ba5b5c9f0bd4a219d19fc18b91c916c to your computer and use it in GitHub Desktop.
Save MuhammadJamaluddin/1ba5b5c9f0bd4a219d19fc18b91c916c to your computer and use it in GitHub Desktop.
some queries results
const fake = require('faker');
const now = require('performance-now');
const fs = require('fs');
const { Book } = require('./index');
let fakeData;
const CreateFakeDocument = function CreateFakeDocument(i) {
const book = {};
// initiate a bunch of new book info
book.id = i;
book.title = fake.random.words(3);
book.author = fake.name.findName();
book.description = fake.lorem.paragraphs();
book.ratings = {
five: fake.random.number(),
four: fake.random.number(),
three: fake.random.number(),
two: fake.random.number(),
one: fake.random.number(),
};
book.reviews = fake.random.number();
book.links = {
kindle: fake.internet.url(),
amazon: fake.internet.url(),
stores: {
audible: fake.internet.url(),
barnesAndNoble: fake.internet.url(),
walmart: fake.internet.url(),
apple: fake.internet.url(),
google: fake.internet.url(),
abebooks: fake.internet.url(),
bookDepository: fake.internet.url(),
indigo: fake.internet.url(),
alibris: fake.internet.url(),
betterWorldBooks: fake.internet.url(),
indieBound: fake.internet.url(),
},
};
book.type = fake.random.word();
book.pages = fake.random.number({ max: 3000 });
book.publishDate = fake.date.past();
book.publisher = fake.company.companyName();
book.metadata = {
originalTitle: book.title,
isbn: fake.random.number(),
isbn13: fake.random.number(),
language: 'English',
};
book.image = 'http://lorempixel.com/480/640/abstract/';
if (i % 2 === 0) {
book.metadata.series = {
name: fake.random.words(2),
url: fake.internet.url(),
};
}
return book;
};
const start = now();
const wstream = fs.createWriteStream('./books.json');
// Write the data to the supplied writable stream one million times.
// Be attentive to back-pressure.
const writeOneMillionTimes = function writeOneMillionTimes(writer, encoding, callback) {
let i = -1;
function write() {
let ok = true;
do {
i += 1;
if (i === 9999999) {
// last time!
writer.write(JSON.stringify(CreateFakeDocument(i)), encoding, callback);
} else {
// See if we should continue, or wait.
// Don't pass the callback, because we're not done yet.
if (i % 10000 === 0) {
console.log(`we have generated ${i} documents`);
}
ok = writer.write(JSON.stringify(CreateFakeDocument(i)), encoding);
}
} while (i < 9999999 && ok);
if (i < 9999999) {
// had to stop early!
// write some more once it drains
writer.once('drain', write);
}
}
write();
};
writeOneMillionTimes(wstream, 'utf-8', () => {
console.log(`the whole process took ${Math.floor((now() - start).toFixed(0) / 1000)} seconds`);
});
module.exports = {
fakeData,
CreateFakeDocument,
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment