【发布时间】:2020-05-02 18:10:18
【问题描述】:
我正在编写一个不和谐的机器人,它会更新人们的余额,人们每发送一条消息都会获得一些金钱奖励。
我为此使用了一个 SQLite 数据库。 我测试了使用队列插入大量条目的情况,最终每个更新请求花费约 6.5 毫秒,其中 5.5 毫秒用于更新查询本身,剩余的 1 毫秒用于检查数据库,如果用户使用条目存在并构建查询字符串。
更新查询是以下几行:(最上面一行是查询)
UPDATE exp12345678 SET exp = 68 , dummy = 159 WHERE userid = 54004700
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.executeUpdate();
插入查询属于(最上面一行是 sql 字符串)。
INSERT INTO exp12345678(userid, exp, dummy) VALUES(?,?,?)
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int i = 1; i <= args.length; i++) {
pstmt.setLong(i, mutationValues[i - 1]);
}
pstmt.executeUpdate();
我尝试使用具有多个线程的队列系统,根据用户使用的 id 在线程中拆分用户(如果我使用 2 个线程,我会将用户 id 编号查询传播到线程 1,同时传播偶数用户 id对线程 2 的数量查询)。这并没有缓解问题。
我不确定如何解决这个问题。我正在使用 SQLite。
更多详情: 查询是一次完成的,这是需要的,因为如果用户请求提供一些价值,他们需要知道他们当前的余额是否足够。
编辑:我使用这些 SQL 调用来创建表:
CREATE TABLE IF NOT EXISTS exp12345678 (
id integer PRIMARY KEY,
userid bigint,
exp bigint,
dummy bigint
);
这些用于从用户那里获取值(以创建更新查询)。
SELECT * FROM exp12345678 WHERE userid = 10437023
现在我所做的只是尝试向现有用户添加一个突变。有没有更快的方法来实现这一点?
【问题讨论】: