- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用带有连接池的node-mysql2,连接限制为10。当我重新启动应用程序时,结果很好 - 它们与我在数据库上的内容相匹配。但是,当我开始插入新记录并重做相同的选择查询时,我会得到间歇性结果,缺少我刚刚添加的最新记录。
如果我直接检查数据库,我可以看到我刚刚通过应用程序添加的记录。只是应用程序无法以某种方式看到它。
我认为这是一个错误,但我的代码设置方式如下:
module.exports.getDB = function (dbName) {
if (!(dbName in dbs)) {
console.log(`Initiating ${dbName}`);
let config = dbConfigs[dbName];
dbs[dbName] = mysql.createPool({
host: config.host,
port: config.port || 3306,
user: config.user,
password: config.password,
connectionLimit: 10,
database: config.database,
debug: config.debug
});
}
return dbs[dbName]; // I just initialize each database once
};
这是我的选择查询:
let db = dbs.getDB('myDb');
const [rows] = await db.query(`my query`);
console.log(rows[0]); // this one starts to show my results inconsistently once I insert records
这是我的插入查询:
module.exports = {
addNote: async function(action, note, userID, expID) {
let db = dbs.getDB('myDb');
await db.query(`INSERT INTO experiment_notes (experiment_id, action, created_by, note)
VALUES (?, ?, ?, ?)`, [expID, action, userID, note]);
}
};
如果我将 connectionLimit 设置为 1,我将无法重现该问题...至少目前还不能重现
知道我做错了什么吗?
最佳答案
将 connection_limit
设置为 1 有一个有趣的副作用:它会序列化从 Node 程序到数据库的所有访问。每个操作(无论是 INSERT 还是 SELECT)都必须在下一个操作开始之前运行完成,因为它必须等待池中的一个连接释放。
间歇性丢失行可能是由于池中的不同连接对 DBMS 的并发访问造成的。如果您在 MySQL 处理来自另一连接的 INSERT 时从一个连接执行 SELECT,则 SELECT 将不会总是找到正在插入的行。这是一个特点。它是 ACID (atomicity, consistency, isolation, durability) 的一部分。 ACID 对于 DBMS 的扩展至关重要。
在比您向我们展示的应用程序更复杂的应用程序中,当您使用 DBMS 事务并忘记提交它们时,可能会发生同样的情况。
编辑 多个数据库连接,甚至来自同一程序中同一池的连接,都彼此独立工作。因此,如果您在一个连接上执行尚未提交的事务并在另一个连接上执行查询,则查询(通常)将反射(reflect)事务开始之前数据库的状态。查询不能强制事务回滚,除非它以某种方式导致死锁。但是死锁会产生错误消息;您可能没有看到任何内容。
有时,您可以在同一连接上使用 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
来控制查询所看到的内容。在繁忙的 DBMS 上,只要您愿意让查询只看到事务的一部分,就可以稍微提高查询性能,并防止一些死锁。我用它来进行历史查询(昨天发生了什么)。已记录here 。默认值(解释您所看到的内容)是 SET TRANSACTION LEVEL REPEATABLE READ;
但是,在需要之前避免使用这种隔离级别的东西。 (该建议属于“太聪明就是愚蠢”的总标题。)
关于node.js - node-mysql2:结果集未反射(reflect)最新结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60432745/
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
ECharts是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的Canvas类库ZRender,提供直观、生动、可交互、可高度个性化定制
前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文
作为一名ios开发攻城狮,在苹果没有出arc(自动内存管理机制)时,我们几乎有一半的开发时间都耗费在这么管理内存上.后来苹果很人性的出了arc,虽然在很大程度上,帮助我们开发者节省了精力和时间.但是
如何反转Pandas中DataSeries的排序顺序,以便我按降序使用它们? 最佳答案 In [28]: s = pd.Series([20, 10, 30], ['c', 'a', 'b']) In
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Is jQuery $.browser Deprecated? 最新的 jQuery 库是否发生变化 $.brows
我正在开发一个 Intranet 项目,所以我无法复制/粘贴代码,所以希望我的描述和一些小片段会有所帮助。 我知道 MySQL 触发器无法做到这一点,但希望有一种干净的 JPA PrePersist(
这是数据集: 人员状态日期 埃里克 1 1/1/2015 埃里克 2 2/1/2015 埃里克 3 2015 年 3 月 1 日 约翰福音 1 3/1/2015 约翰福音 2 2015 年 2 月 1
现在我正在使用下面的查询按每篇文章的 auto_increment id 排序 mysql_query("SELECT * FROM articles ORDER BY id DESC"); 我想知道
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
现在我正在使用下面的查询按每篇文章的 auto_increment id 排序 mysql_query("SELECT * FROM articles ORDER BY id DESC"); 我想知道
在我们做文章的时候常用一些函数修改来实现自己的页面效果,例如,时间的自定义格式 我们常常需要乃至的,搜集了些有关时间格式的CODE,作大家为参考,希望对大家有些帮助 列表页list_article
我想将某些东西提交到 github 存储库,但我(显然)没有任何权利这样做。我对那个 repo 做了一个分支,提交了我的更改并提交了一个 pull-request。 现在,问题是过了一段时间其他人已经
我是 SQL 新手,所以现有的答案对我来说有点复杂。 我有三张 table : WORKER |id |name |date |... JOB |id |name |salary |accept AP
我正在自动从PowerPoint和Excel电子表格中生成PowerPoint报表。在粘贴表格之前,我已经完成了整个过程。 我使用PPApp.CommandBars.ExecuteMso ("Past
我们有 1 个 Kafka 主题和 1 个分区: 从 spring boot kafka 消费者那里看到一个相当奇怪的行为。 Spring kafka消费者在重新启动时总是从主题的开头开始消费。 我已
通过编程从iOS照片库获取最新照片是否有技巧? 我知道我可以按日期搜索,但是我必须每隔一微秒进行一次扫描,以便进行某种比较以准确地找到它。 有没有人做过这个或任何想法? 最佳答案 我之前采取的一种方法
我们上周将 Web 应用程序中的 Telerik Kendo 库从 V2015.2.902 升级到 V2016.1.112。从那时起,我们注意到使用 Kendo 的页面需要很长时间才能加载(30 秒到
我有两个表: STUDENT GRADES ---------- ---------- id id name person_id ad
我是一名优秀的程序员,十分优秀!