A Twitch.tv viewer reward and games system.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

112 lines
3.1 KiB

var lib = __dirname + '/../lib';
var Protocol = require(lib + '/protocol/protocol');
var Packets = require(lib + '/protocol/packets');
var PacketWriter = require(lib + '/protocol/PacketWriter');
var Parser = require(lib + '/protocol/Parser');
var options = {
rows : 100000,
bufferSize : 64 * 1024,
};
console.error('Config:', options);
function createBuffers() {
var parser = new Parser();
process.stderr.write('Creating row buffers ... ');
var number = 1;
var id = 0;
var start = Date.now();
var buffers = [
createPacketBuffer(parser, new Packets.ResultSetHeaderPacket({fieldCount: 2})),
createPacketBuffer(parser, new Packets.FieldPacket({catalog: 'foo', name: 'id'})),
createPacketBuffer(parser, new Packets.FieldPacket({catalog: 'foo', name: 'text'})),
createPacketBuffer(parser, new Packets.EofPacket()),
];
for (var i = 0; i < options.rows; i++) {
buffers.push(createRowDataPacketBuffer(parser, number++));
}
buffers.push(createPacketBuffer(parser, new Packets.EofPacket));
buffers = mergeBuffers(buffers);
var bytes = buffers.reduce(function(bytes, buffer) {
return bytes + buffer.length;
}, 0);
var mb = (bytes / 1024 / 1024).toFixed(2)
console.error('%s buffers (%s mb) in %s ms', buffers.length, mb, (Date.now() - start));
return buffers;
}
function createPacketBuffer(parser, packet) {
var writer = new PacketWriter();
packet.write(writer);
return writer.toBuffer(parser);
}
function createRowDataPacketBuffer(parser, number) {
var writer = new PacketWriter();
writer.writeLengthCodedString(parser._nextPacketNumber);
writer.writeLengthCodedString('Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has sur');
return writer.toBuffer(parser);
}
function mergeBuffers(buffers) {
var mergeBuffer = new Buffer(options.bufferSize);
var mergeBuffers = [];
var offset = 0;
for (var i = 0; i < buffers.length; i++) {
var buffer = buffers[i];
var bytesRemaining = mergeBuffer.length - offset;
if (buffer.length < bytesRemaining) {
buffer.copy(mergeBuffer, offset);
offset += buffer.length;
} else {
buffer.copy(mergeBuffer, offset, 0, bytesRemaining);
mergeBuffers.push(mergeBuffer);
mergeBuffer = new Buffer(options.bufferSize);
buffer.copy(mergeBuffer, 0, bytesRemaining);
offset = buffer.length - bytesRemaining;
}
}
if (offset > 0) {
mergeBuffers.push(mergeBuffer.slice(0, offset));
}
return mergeBuffers;
}
function benchmark(buffers) {
var protocol = new Protocol();
protocol._handshakeInitializationPacket = true;
protocol.query({typeCast: false, sql: 'SELECT ...'});
var start = +new Date;
for (var i = 0; i < buffers.length; i++) {
protocol.write(buffers[i]);
}
var duration = Date.now() - start;
var hz = Math.round(options.rows / (duration / 1000));
console.log(hz);
}
var buffers = createBuffers();
while (true) {
benchmark(buffers);
}