我不想进行详细的比较。我也不想定义“什么是最好或最快的”内存数据库。
它们都很相似,所以我想了解一下关键差异的概述。
那么它们是什么?
在Tarantool中,当Lua代码作者希望Tarantool安排执行时,会使用光纤吗?当Lua代码作者希望控制执行时,是否使用了协同例程(在Tarantool/LuaJIT过程中)?
Tarantool Cartridge 角色文件有一个函数init。
我想从instance.yml文件中获取我的自定义选项。但是opts变量没有它。
我该怎么做?
我在 tarantool 墨盒(集群)上有一个默认应用程序。我想连接到集群的路由器。我使用命令:
tarantoolctl connect admin:_password_@localhost:3301
Run Code Online (Sandbox Code Playgroud)
在哪里可以找到默认密码?
我安装了tarantool(tarantool_box)和tarantool-client.我可以开始tarantool了
/usr/bin/tarantool_box --background
Run Code Online (Sandbox Code Playgroud)
但是当我尝试连接到服务器时
/usr/bin/tarantool
Run Code Online (Sandbox Code Playgroud)
我只看到管理控制台
localhost>
Run Code Online (Sandbox Code Playgroud)
并且只能使用一些命令和类似SQL的查询.我不能使用用户指南中的任何命令,几乎所有以lua失败开头的命令:
lua console = require('console')
---
error: 'Lua error: [string "local console = require(''console'')"]:1: attempt to call global ''require'' (a nil value)'
...
Run Code Online (Sandbox Code Playgroud) 设定:
tarantool实例,使用memtx / vinyl存储。box.cfg.snapshot_period(memtx多长时间获取一次磁盘快照)设置为14400(每4小时一次)。
用户几乎永久地将有价值的承诺提交给数据库。
备份系统:
我每15分钟执行一次备份,方法是调用box.backup.start()并使用一些外部脚本将列出的文件复制到备份存储中。
最近,我发现复制的文件的校验和仅在拍摄快照后(每4小时)才更改。
我已经检查了* .xlog(据我所知,这是memtx将所有信息提交的地方)的文件是否包含在备份文件中,而没有。
我想说的是:
有什么办法可以备份xlog文件吗?仅将它们与文件列表的其余部分一起复制就足够了吗?还是在box.backup.start()和box.backup.stop()之间的复制过程中更改它们并使它们变得不一致?
如果在快照之间进行备份,box.backup.start()是否有任何参数可以备份存储在memtx中的所有信息?
我通过在每次备份之前拍摄快照来查看可能的解决方法,但是我想确保在实施xlog文件之前没有办法对其进行备份。
有几种方法可以获得时间Tarantool:
clock模块fiber.time功能os.date 但是处理日期的正确方法是什么?
我正在尝试从头开始在 Docker 中启动 Tarantool(没有现有数据)。我使用他们在教程中建议的 Docker 命令并在 MacOS 10.15.6 (Catalina) 上的 Docker Desktop 2.4.0.0 下运行它:
docker run \
--name mytarantool \
-d -p 3301:3301 \
-v /data/dir/on/host:/var/lib/tarantool \
tarantool/tarantool:2.5.1
Run Code Online (Sandbox Code Playgroud)
(/data/dir/on/host替换为我在笔记本电脑上的本地目录)。我也用最新版本 2.6.0 尝试过。
容器在启动后很快终止。docker logs显示这个:
2020-10-02 20:51:10.331 [1] main/103/tarantool-entrypoint.lua C> Tarantool 2.6.0-0-g47aa4e01e
2020-10-02 20:51:10.331 [1] main/103/tarantool-entrypoint.lua C> log level 5
2020-10-02 20:51:10.332 [1] main/103/tarantool-entrypoint.lua I> mapping 268435456 bytes for memtx tuple arena...
2020-10-02 20:51:10.332 [1] main/103/tarantool-entrypoint.lua I> mapping 134217728 bytes for vinyl tuple arena...
2020-10-02 20:51:10.335 …Run Code Online (Sandbox Code Playgroud) 我正在使用tarantool/tarantool:2.6.0Docker 映像(目前是最新的)并为该项目编写 lua 脚本。我试图找出如何查看print()调用函数的结果。在没有 print() 工作的情况下调试我的代码是非常困难的。
在 tarantool 控制台中 print() 也无效。
使用简单的打印()
文档说 print() 适用于stdout,但是当我通过以下方式查看容器日志时没有看到任何结果docker logs -f <CONTAINER_NAME>
我还尝试将容器的日志驱动程序设置为local. 比我一次打印到容器的日志,但只有一次......
容器的/var/log目录始终为空。
使用 box.session.push()
box.session.push()在控制台中使用工作正常,但是当我在 lua 脚本中使用它时:
-- app.lua
function log(s)
box.session.push(s)
end
-- No effect
log('hello')
function say_something(s)
log(s)
end
box.schema.func.create('say_something')
box.schema.user.grant('guest', 'execute', 'function', 'say_something')
Run Code Online (Sandbox Code Playgroud)
然后say_something()像这样从 nodeJs 连接器调用:
const TarantoolConnection = require('tarantool-driver');
const conn = new TarantoolConnection(connectionData);
const res = await conn.call('update_links', 'hello');
Run Code Online (Sandbox Code Playgroud)
有什么建议?谢谢!
写入 Tarantool memtx 时,客户端上出现“无法为 memtx_tuple 分配 153 个字节”错误的原因是什么?