golang sqlite 有纯go语言实现的吗?或者还有什么微型数据库有纯go实现?

943 views
Skip to first unread message

GameXG

unread,
Jan 5, 2017, 9:22:19 PM1/5/17
to Golang-China
想去除硬盘里面重复保存的照片资料等文件,所以写了个重复文件扫描,计算文件md5后根据md5搜索重复文件。

目前由于内容太多跑起来太慢了,最悲剧的是两次半夜都出问题中断了,疑似map保存文件列表占用内存太大了。

目前希望增加断点续传功能及多次扫描时文件未更改时不重复计算md5的功能。所以想增加一个小型数据库保存文件对应的md5值、文件修改日期和大小等信息。

几个sqlite实现都是cgo的,放到freenas上面需要交叉编译.这单独的一次到不是什么麻烦,但是以后需要小型数据库的软件都做各个平台交叉编译就麻烦了。

想问一下有纯go实现的小型数据库吗?

minux

unread,
Jan 5, 2017, 9:35:29 PM1/5/17
to Golang-China
这个应用不需要完整的关系数据库吧,支持 key/value store 就够了吧,
比如 boltdb 或者 LevelDB ?

一定要支持 ACID 和 SQL 的话,可以看看 https://godoc.org/github.com/cznic/ql

这类的包很多,自己在 godoc.org 上搜索吧。

yegle

unread,
Jan 5, 2017, 11:19:54 PM1/5/17
to golang中文小组
这个可以输出成文件,然后再shell处理下…

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/CAFK4q9xzW7gFGLmeCRfN42K2j7eAm3WyE-uY2JpLrdy88kguoQ%40mail.gmail.com
要查看更多选项,请访问https://groups.google.com/d/optout



--

Larry Li

unread,
Jan 5, 2017, 11:27:32 PM1/5/17
to golang...@googlegroups.com
我的做法比 yegle 更暴力,就在当前目录下新建一个 cache 目录。然后把扫描的文件 path md5 成字符串当作文件名保存在 cache 目录中,把需要的信息序列化在文件里面。

Shell Xu

unread,
Jan 6, 2017, 2:08:27 AM1/6/17
to golang...@googlegroups.com
这活我干过,不过是用的python。当时使k-v数据库就齐活了。
而且我不是计算完整文件md5,而是计算头4k的md5+文件大小作为k。一致聚类后再去读文件细分。因为一般来说,重复内容是少数,为了验证这个去读完整文件比较亏。而内容一样的文件,头4k和大小必定是一致的。所以可以使用基本条件筛出潜在的重复文件后,再对这些文件验证是否严格一致。

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com



--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.org/

GameXG

unread,
Jan 6, 2017, 5:22:11 AM1/6/17
to golang...@googlegroups.com
@minux 这次倒是不需要完整的sql支持,不过 sqlite 是一个普遍需求,很多地方为了简单不使用 mssql 用sqlite更简单些,可惜没有纯go实现的。boltdb 和 LevelDB 看起来都挺合适的。感谢推荐。

@yegle shell 不熟悉。不过存文件保存进度是个好主意。

@larry li 在分一下子目录,感觉麻烦点。

@shell xu 好主意,只用计算开头。不过极端些第一次只记录尺寸,后期把相同尺寸的在比较一次不知道是否更快些。


Shell Xu

unread,
Jan 6, 2017, 6:01:07 AM1/6/17
to golang...@googlegroups.com
当然会快。但是小尺寸文件重合率太高,要精细分辨的话,系统复杂度又跟着上去了。所以我折衷就是4k,一个块。

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com

GameXG

unread,
Jan 7, 2017, 1:01:24 AM1/7/17
to golang...@googlegroups.com
最近用什么库炸什么库

日志库切换日志文件必定阻塞,库用户量少,出这种严重问题还算正常。
go-mssql 服务器或网络存在问题造成连接断开后代码逻辑有问题直接死循环,这个用户量应该不少,怎么还有这种坑?
这次 boltdb 又 panic 了,同样可以复现,只是临时用,懒得填了。

是不是 go 语言历史还是比较短,各个库历史也比较短,所以坑没填全?






Shell Xu <shell...@gmail.com>于2017年1月6日周五 下午7:01写道:
当然会快。但是小尺寸文件重合率太高,要精细分辨的话,系统复杂度又跟着上去了。所以我折衷就是4k,一个块。

2017-01-06 18:21 GMT+08:00 GameXG <gam...@gmail.com>:
@minux 这次倒是不需要完整的sql支持,不过 sqlite 是一个普遍需求,很多地方为了简单不使用 mssql 用sqlite更简单些,可惜没有纯go实现的。boltdb 和 LevelDB 看起来都挺合适的。感谢推荐。

@yegle shell 不熟悉。不过存文件保存进度是个好主意。

@larry li 在分一下子目录,感觉麻烦点。

@shell xu 好主意,只用计算开头。不过极端些第一次只记录尺寸,后期把相同尺寸的在比较一次不知道是否更快些。


--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com



--
彼節者有間,而刀刃者無厚;以無厚入有間,恢恢乎其於游刃必有餘地矣。
blog: http://shell909090.org/

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/CADexTby7o-Hn2ysDbUSbyZKMwrGbAPMRp6n9r_haGzGpZw2GUQ%40mail.gmail.com
要查看更多选项,请访问https://groups.google.com/d/optout

Linker

unread,
Oct 10, 2017, 11:42:59 PM10/10/17
to golang...@googlegroups.com
The lightweight, distributed relational database built on SQLite. 

--
--
官网: http://golang-china.org/
IRC: irc.freenode.net #golang-china
@golangchina
---
您收到此邮件是因为您订阅了Google网上论坛上的“Golang-China”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到golang-china+unsubscribe@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/golang-china/CABEqSziL6tugWZr13eS5Rgcm894rDbWcW0ZRfObeT1981U_o4g%40mail.gmail.com
要查看更多选项,请访问https://groups.google.com/d/optout



--
Regards,
Linker Lin

linker...@gmail.com
Reply all
Reply to author
Forward
0 new messages