Advertisement
Guest User

Untitled

a guest
Apr 10th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. import Promise from 'bluebird';
  2.  
  3. const dataCount = 1000000;
  4. const orgId = 'abc';
  5. const orgName = 'abc;'
  6.  
  7. var knex = require('knex')({
  8. client: 'mysql',
  9. connection: {
  10. host: '127.0.0.1',
  11. user: 'root',
  12. password: '19890213',
  13. database: 'test',
  14. }
  15. });
  16.  
  17. let t1, t2, t3, t4;
  18.  
  19. knex.schema.dropTableIfExists('candidates')
  20. .then(() => {
  21. return knex.schema.dropTableIfExists('jobs')
  22. })
  23. .then(() => {
  24. return knex.schema.dropTableIfExists('organizations');
  25. })
  26. .then(() => {
  27. return knex.schema.createTableIfNotExists('organizations', (table) => {
  28. table.string('id').primary();
  29. table.string('name');
  30. });
  31. })
  32. .then(() => {
  33. return knex.schema.createTableIfNotExists('jobs', (table) => {
  34. table.string('id').primary();
  35. table.string('org_id');
  36. });
  37. })
  38. .then(() => {
  39. const q = knex.schema.createTableIfNotExists('candidates', (table) => {
  40. table.increments('id');
  41. table.string('org_id').references('organizations.id').onDelete('CASCADE').onUpdate('CASCADE');
  42. table.string('job_id').references('jobs.id').onDelete('SET NULL');
  43. table.integer('archived');
  44. table.integer('deleted');
  45. });
  46. return q;
  47. })
  48. .then(() => {
  49. // seed data
  50. // 10000 jobs
  51. const jobs = [];
  52. const candidates = [];
  53.  
  54. for (var i = 0; i < dataCount; i ++ ) {
  55. const jobId = i;
  56. jobs.push({
  57. id: jobId,
  58. org_id: orgId,
  59. });
  60. candidates.push({
  61. org_id: orgId,
  62. job_id: jobId,
  63. archived: 0,
  64. deleted: 0,
  65. });
  66. }
  67. const org = {
  68. id: orgId,
  69. name: orgName,
  70. }
  71. const q0 = knex('organizations').insert(org);
  72. const q1 = knex('jobs').insert(jobs);
  73. const q2 = knex('candidates').insert(candidates);
  74. return q0.then(() => {
  75. return q1;
  76. })
  77. .then(() => {
  78. return q2;
  79. });
  80. })
  81. .then(() => {
  82. console.log('SEED DATA DONE');
  83. const orgId = 'abc';
  84. const cJobIdSubQuery = knex.select('candidates.id', 'candidates.job_id')
  85. .from('candidates')
  86. .where('candidates.org_id', orgId)
  87. .andWhere('candidates.archived', 0)
  88. .andWhere('candidates.deleted', 0)
  89. .as('cJob');
  90.  
  91. const query = knex.select(knex.raw('jobs.id, count(cJob.id) as count'))
  92. .from('jobs')
  93. .leftJoin(cJobIdSubQuery, 'jobs.id', 'cJob.job_id')
  94. .where('jobs.org_id', orgId)
  95. .groupBy('jobs.id');
  96.  
  97. console.log('query1: ', query.toString())
  98.  
  99. t1 = Date.now();
  100.  
  101. return query;
  102. })
  103. .then((rows) => {
  104. t2 = Date.now();
  105. console.log('used: ', t2 - t1)
  106.  
  107. // Start new query
  108. const query = knex.select('j.id', knex.raw(`count(c.id) as count`))
  109. .from('jobs as j')
  110. .leftJoin('candidates as c', 'j.id', 'c.job_id')
  111. .where('j.org_id', orgId)
  112. .where(function() {
  113. this.where('c.archived', 0)
  114. .orWhereNull('c.archived');
  115. })
  116. .where(function() {
  117. this.where('c.deleted', 0)
  118. .orWhereNull('c.deleted');
  119. })
  120. .groupBy('j.id');
  121.  
  122. console.log('query2: ', query.toString())
  123. t3 = Date.now();
  124.  
  125. return query;
  126. })
  127. .then((rows) => {
  128. t4 = Date.now();
  129. console.log('used: ', t4 - t3)
  130. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement