npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

doris2

v1.0.7

Published

一个基于mysql2的Nodejs Doris工具库

Downloads

13

Readme

Node-Doris 连接器

  • Doris 兼容 Mysql 协议,api一致。

适用于Node.js的Doris客户端,专注于性能优化。支持SQL预处理、非UTF-8编码支持、二进制文件编码支持、压缩和SSL等等 查看更多

目录

node-doris的由来

安装

node-doris 可以跨平台使用,毫无疑问可以安装在 Linux、Mac OS 或 Windows 上。

npm install --save node-doris

查询数据

// 导入模块
const doris = require('node-doris');

// 创建一个数据库连接
const connection = doris.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'test'
});

// 简单查询
connection.query(
  'SELECT * FROM `table` WHERE `name` = "Page" AND `age` > 45',
  function(err, results, fields) {
    console.log(results); // 结果集
    console.log(fields); // 额外的元数据(如果有的话)
  }
);

// 使用占位符
connection.query(
  'SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',
  ['Page', 45],
  function(err, results) {
    console.log(results);
  }
);

SQL预处理的使用

使用 node-doris,您还可以提前准备好SQL预处理语句。 使用准备好的SQL预处理语句,MySQL 不必每次都为相同的查询做准备,这会带来更好的性能。 如果您不知道为什么它们很重要,请查看这些讨论:

node-doris 提供了 execute 辅助函数,它将准备和查询语句。 您还可以使用 prepare / unprepare 方法手动准备/取消准备。

// 导入模块
const doris = require('node-doris');

// 创建一个数据库连接
const connection = doris.createConnection({
  host: 'localhost',
  user: 'root',
  database: 'test'
});

// execute 将在内部调用 prepare 和 query
connection.execute(
  'SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',
  ['Rick C-137', 53],
  function(err, results, fields) {
    console.log(results); // 结果集
    console.log(fields); // 额外元数据(如果有)

    // 如果再次执行相同的语句,他将从缓存中选取
    // 这能有效的节省准备查询时间获得更好的性能
  }
);

连接池的使用

连接池通过重用以前的连接来帮助减少连接到 MySQL 服务器所花费的时间,当你完成它们时让它们保持打开而不是关闭。

这改善了查询的延迟,因为您避免了建立新连接所带来的所有开销。

// 导入模块
const doris = require('node-doris');

// 创建连接池,设置连接池的参数
const pool = doris.createPool({
  host: 'localhost',
  user: 'root',
  database: 'test',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0,
  enableKeepAlive: true,
  keepAliveInitialDelay: 0
});

该池不会预先创建所有连接,而是根据需要创建它们,直到达到连接限制。

您可以像直接连接一样使用池(使用 pool.query()pool.execute()):

// For pool initialization, see above
pool.query("SELECT `field` FROM `table`", function(err, rows, fields) {
  // Connection is automatically released when query resolves
});

或者,也可以手动从池中获取连接并稍后返回:

// For pool initialization, see above
pool.getConnection(function(err, conn) {
  // Do something with the connection
  conn.query(/* ... */);
  // Don't forget to release the connection when finished!
  pool.releaseConnection(conn);
});

Promise封装

node-doris 也支持 Promise API。 这与 ES7 异步等待非常有效。

async function main() {
  // get the client
  const doris = require('node-doris/promise');
  // create the connection
  const connection = await doris.createConnection({host:'localhost', user: 'root', database: 'test'});
  // query database
  const [rows, fields] = await connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?', ['Morty', 14]);
}

node-doris 使用范围内可用的默认 Promise 对象。 但是你可以选择你想使用的 Promise 实现。

// get the client
const doris = require('node-doris/promise');

// get the promise implementation, we will use bluebird
const bluebird = require('bluebird');

// create the connection, specify bluebird as Promise
const connection = await doris.createConnection({host:'localhost', user: 'root', database: 'test', Promise: bluebird});

// query database
const [rows, fields] = await connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?', ['Morty', 14]);

node-doris 还在 Pools 上公开了一个 .promise()函数,因此您可以从同一个池创建一个 promise/non-promise 连接。

async function main() {
  // get the client
  const doris = require('node-doris');
  // create the pool
  const pool = doris.createPool({host:'localhost', user: 'root', database: 'test'});
  // now get a Promise wrapped instance of that pool
  const promisePool = pool.promise();
  // query database using promises
  const [rows,fields] = await promisePool.query("SELECT 1");
}

node-doris 在 Connections 上公开了一个 .promise*()函数,以“升级”现有的 non-promise 连接以使用 Promise。

// get the client
const doris = require('node-doris');
// create the connection
const con = doris.createConnection(
  {host:'localhost', user: 'root', database: 'test'}
);
con.promise().query("SELECT 1")
  .then( ([rows,fields]) => {
    console.log(rows);
  })
  .catch(console.log)
  .then( () => con.end());

结果返回

如果你有两个相同名称的列,你可能希望以数组而不是对象的形式获取结果,为了防止冲突,这是与 Node MySQL 库的区别。

例如: select 1 as foo, 2 as foo.

您可以在连接级别(适用于所有查询)或查询级别(仅适用于该特定查询)启用此设置。

连接级别

const con = doris.createConnection(
  { host: 'localhost', database: 'test', user: 'root', rowsAsArray: true }
);

查询级别

con.query({ sql: 'select 1 as foo, 2 as foo', rowsAsArray: true }, function(err, results, fields) {
  console.log(results) // 返回数组而不是数组对象
  console.log(fields) // 无变化
});

API配置项

node-doris大部分的API与 Node MySQL 基本上相同,你应该查看他们的API文档来知道更多的API选项。

如果您发现与 Node MySQL 的任何不兼容问题,请通过issue报告。 我们将优先修复报告的不兼容问题。

文档

你可以在这里获得更多的详细文档,并且你应该查阅各种代码示例来获得更高级的概念。

鸣谢

贡献

如果要为node-doris做些贡献.请查阅 Contributing.md 来获得更多详细信息。