Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

批量写入PIKA数据丢失问题 #862

Closed
PuddingCoder opened this issue Feb 28, 2020 · 6 comments
Closed

批量写入PIKA数据丢失问题 #862

PuddingCoder opened this issue Feb 28, 2020 · 6 comments

Comments

@PuddingCoder
Copy link

PuddingCoder commented Feb 28, 2020

使用go语言,redigo框架写入。KV数据规模1.2亿,会丢失10万左右的数据。
代码示例:

conn, err := redis.Dial("tcp", address)
for:
    err = conn.Send("set", pikaInfo.Key, string(pikaInfoValue))
        if 每十万提交一次:
    	    err = conn.Flush()
    err = conn.Flush()
@whoiami
Copy link
Contributor

whoiami commented Feb 28, 2020

1,使用的版本是什么呢 2,如何确定数据写入返回ok的 3, 如何统计数据丢了的

@PuddingCoder
Copy link
Author

PuddingCoder commented Mar 2, 2020

1,使用的版本是什么呢 2,如何确定数据写入返回ok的 3, 如何统计数据丢了的

  1. PIKA 版本:pika_version:3.2.8、redis客户端4.0.1
  2. 当前使用批量的方式将KV导入到数据库中,导入过程见上。导入过程中没有任何报错。抽样一些数据查key,可以查到值
  3. 导入完成后查看PIKA info keyspace,发现数目比导入数据量少(无重复数据)。抽样get一些key发现没有写入。 (PIKA log也没有任何报错信息)

目前情况大概是这样,让人捉不到头脑。

@whoiami
Copy link
Contributor

whoiami commented Mar 2, 2020

你好 info all 可以看目前执行了哪些命令例如
Command_Exec_Count
GET:10000000
SET:10002000
ZREVRANGE:1000
KEYS:3
INFO:24
FLUSHALL:1
我自己在本地测试了1000W个key 然后再拿出来是没有问题的,一条都没有少,你可以检查一下你写入的条数有没有问题

@PuddingCoder
Copy link
Author

PuddingCoder commented Mar 4, 2020

你好 info all 可以看目前执行了哪些命令例如
Command_Exec_Count
GET:10000000
SET:10002000
ZREVRANGE:1000
KEYS:3
INFO:24
FLUSHALL:1
我自己在本地测试了1000W个key 然后再拿出来是没有问题的,一条都没有少,你可以检查一下你写入的条数有没有问题

请问能分享一个go语言下的批量写入demo吗,可能是我批量写入的问题。
另外十万一次的批上传,需要需要修改下PIKA的config吗?

@whoiami
Copy link
Contributor

whoiami commented Mar 4, 2020

我自己本身用hiredis的 go的demo可能不太熟悉
10W一次是一次pipeline10W条 是吗?10W 的话pika有最大单次请求命令限制默认 256MByte

@AlexStocks
Copy link
Contributor

我自己本身用hiredis的 go的demo可能不太熟悉 10W一次是一次pipeline10W条 是吗?10W 的话pika有最大单次请求命令限制默认 256MByte

刘振:明寰的意思是如果使用了 pipeline 模式可能导致数据超载了,导致数据超过了 pika server 段链接数据的buffer,导致丢数据。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants