对于测试非空字符串(在Go中)哪种方法最好(更像是idomatic)?
if len(mystring) > 0 { }
Run Code Online (Sandbox Code Playgroud)
要么:
if mystring != "" { }
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
我不确定我问的是正确的问题......但是当我一直在阅读所有可以解决的Docker时,我看到我可以在Ubuntu 12.04上安装Docker(例如)然后我可以安装一个Fedora容器还是不同版本的ubuntu?(有一个例子,用户在容器中安装了busybox.)
当然,我可能完全错了.
但我希望基础系统和容器之间存在短暂的连接.
重申:主机操作系统和容器基础映像的操作系统之间的关系是什么?
给定一个结构:
type MyStruct struct {
A int
B int
}
Run Code Online (Sandbox Code Playgroud)
和一个带结构名称的字符串
a := "MyStruct"
Run Code Online (Sandbox Code Playgroud)
要么
a := "mypkg.MyStruct"
Run Code Online (Sandbox Code Playgroud)
如何从字符串名称而不是结构创建结构的实例?我的想法是创建一个应用程序,其中所有结构都链接到二进制文件中,但是从字符串创建运行时实例.(一种元元)
假设在重新启动操作系统时,任何init.d或systemd类似进程都会自动重启Docker守护程序,重启一个或多个Docker容器的首选方法是什么?例如,我可能在反向代理或数据库服务器后面有许多Web服务器.
当我创建/调试docker镜像/容器时,docker似乎在我的系统上留下了各种各样的工件.(在某一点上有48个图像限制)但是我最后一次看到那里有20-25张图像; docker images.
所以最重要的问题是:
和元问题......我没有问过哪些问题需要?
我有多个活动分支,我需要同时处理.显然,我可以创建两个工作目录,每个目录有一个不同的分支.这是唯一的方法,无需"提交"和"结账",以便从一个分支切换到另一个分支?
我相信节点间的通信是明确的,并且cookie值严格用于身份验证.(我还没有任何证据).
警告:背景信息很长.如果您认为在背景信息之前需要问题,请跳到底部.欣赏这将要采取的时间!
我一直在网上(阅读谷歌),我没有找到一个好的答案.是的,在erlang.org网站上有很多关于Mnesia文档的链接和参考,但即使这些链接也受到版本的影响.
因此,在最简单的情况下,您当前连接的节点()与表集的所有者相同,那么备份/恢复将起作用.例如:
$ erl -sname mydatabase
> mnesia:start().
> mnesia:create_schema(...).
> mnesia:create_table(...).
> mnesia:backup("/tmp/backup.bup").
> mnesia:restore("/tmp/backup.bup", [{default_op, recreate_tables}]).
Run Code Online (Sandbox Code Playgroud)
嘿,这很棒!
但是,如果数据库实际上是在远程接口上的远程节点()或远程节点()上运行,那么您必须以这种方式启动备份:
$ erl -sname mydbadmin
> rpc:call(mydatabase@host, mnesia, backup, ["/tmp/backup.bup"]).
> rpc:call(mydatabase@host, mnesia, restore, ["/tmp/backup.bup", [{default_op, recreate_tables}]]).
Run Code Online (Sandbox Code Playgroud)
当然这也很简单.现在这里是棘手的事情....
但事情变得复杂了.虽然我的熟人是erlang和mnesia专家,他们认为mnesia的复制存在严重缺陷,你不应该使用它(目前我还没有其他替代方案,你有什么机会实现更好的版本;不是可能)
所以你有两个节点()复制ram和基于光盘的表.您一直在使用默认的BackupMod维护使用标准备份定期备份数据库的策略.有一天,经理会要求您验证备份.只有当您尝试还原数据库时,才会获得:
{atomic,[]}
Run Code Online (Sandbox Code Playgroud)
根据文档,这意味着没有错误......但是没有表格被恢复.
不想跑你记住,节点()和主机名必须匹配,以便您更改主机名和-sname参数去那里数据被备份的计算机匹配change_node程序.但是这次你得到一个奇怪的错误:
{aborted,{'EXIT',{aborted,{bad_commit,{missing_lock,mydatabase@otherhost}}}}}
Run Code Online (Sandbox Code Playgroud)
仍然不想运行change_node过程我快速克隆恢复我的服务器,以便我有两个类似的机器.然后我恰当地命名以匹配生产服务器.然后我开始恢复过程.找到了!我现在在还原服务器上有真正的工作数据.
我想说这是路的尽头......但我还没有问过一个问题,而且问题的重点......所以这就是它?
问题:如果我想恢复从复制的mnesia节点集群中获取的备份,如何修改文件(类似于change_node过程),以便忽略其他节点或从备份中删除?
问题略有不同:如何在单个节点()上恢复复制多节点()mnesia数据库?
我有一组erlang节点通过Mnesia的"extra_db_nodes"复制他们的数据......我需要升级硬件和软件,所以当我从节点到节点时,我必须分离一些节点.
如何删除节点并仍然保留插入的数据?
[update]删除节点与添加节点一样重要.随着集群的增长,它也必须收缩.如果没有,那么Mnesia将忙于尝试向不存在的节点发送数据以填充队列并保持网络繁忙.
[ 最后更新 ]在通过erlang/mnesia源代码填写后,我能够确定不可能完全取消关联节点.虽然del_table_copy删除了表之间的链接,但它不完整.我会关闭这个问题,但没有一个密切的描述是足够的.
我有一张超过10万行的表.我需要在单个列上创建索引,但是,索引需要很长时间才能创建,我会对表进行锁定.
值得注意的是,指数正在创建作为它的一部分可能是重要的"耙分贝:迁移"一步......我并不反对手动创建索引是否会工作.
更新:我想我应该提到这是一个写常常表.