加载批量数据的正确方法

Wajahat

我正在尝试将大量数据加载到memcachedb中。我正在MySQL数据库上运行一些查询,我想将这些查询的结果存储在memcachedb中,以便以后轻松访问。

当前,我只是使用简单的set命令将结果存储在memcachedb中,但是由于存在数十亿个结果,因此将它们逐个存储在一个循环中是非常低效且耗时的。因此,我想知道是否有更好的方法将数据加载到memcachedb?就像传统RDMS中的数据导入向导一样

我正在使用pylibmc连接到memcachedb。

马丁·图尔诺伊(Martin Tournoij)

pylibmc库具有该set_multi函数,可以一次性发送一堆命令:

mc.set_multi({
    'key': 'Hello',
    'another': True,
    #[..]
})

这可能应该工作得足够好。如果您拥有数十亿个密钥,则可能需要将其拆分为几千个大块。

如果仅通过套接字发送命令,则可能会降低性能。内存缓存协议是很简单。这样做的好处是您可以添加noreply标志,因此服务器不会打扰发送答复。当然,这意味着您无法执行任何错误检查,并且无论出于何种原因丢失一些密钥都可以。

这是一个简单的概念证明:

#!/usr/bin/env python

import socket

data = 'set key_1 0 86400 5\r\nabcde\r\n'
data += 'set key_2 0 86400 5\r\nzxcvb\r\n'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 11211))
s.sendall(data)
print(s.recv(8192))
s.close()

# Verify if it worked!
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 11211))
s.sendall('get key_1\r\n')
s.sendall('get key_2\r\n')
print(s.recv(8192))
s.close()

哪个应该输出:

STORED
STORED

VALUE key_1 0 5
abcde
END
VALUE key_2 0 5
zxcvb
END

set命令的格式为:

set <key> <flags> <exptime> <data_size> [noreply]\r\n
<data>\r\n

当然,这只是概念证明;一个更高级的示例可能是这样的:

#!/usr/bin/env python

import socket

def make_set(n, data):
    return 'set key_{} 0 86400 {}\r\n{}\r\n'.format(n, len(data), data)

data = open('/etc/aliases').readlines()
commands = [ make_set(n, d.strip()) for n, d in enumerate(data) if d.strip() != '' ]

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 11211))
s.sendall(''.join(commands))
print(s.recv(65000))

# Verify if it worked!
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 11211))
for n in range(0, len(commands)):
    s.sendall('get key_{}\r\n'.format(n))
print(s.recv(65000))
s.close()

如果您要从MySQL获取数据,请考虑set使用SQL查询发出命令!例如:

select
    concat('set key_', page_id, ' 0 86400 ', length(page_title), '\r\n', page_title, '\r\n')
    as cmd
from page limit 2;

不确定这实际上是否更快,但我怀疑是这样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Hazelcast中批量加载数据的最佳方法

来自分类Dev

更快地批量加载嵌套数据

来自分类Dev

Ag-grid 批量调用数据加载

来自分类Dev

将数据批量加载到Azure DocumentDB集合中的最佳方法

来自分类Dev

在python中从json文件加载数据的正确方法

来自分类Dev

json 无法正确加载数据

来自分类Dev

在MEAN + Mongoose堆栈中的何处加载批量数据?

来自分类Dev

从sybase数据库批量加载到HDFS

来自分类Dev

将批量JSON数据加载到SQL Server表中

来自分类Dev

如何使用带有不同编码的psql批量加载数据?

来自分类Dev

IBM Bluemix:将数据批量加载到MongoDB中

来自分类Dev

从Node.js批量加载titan db中的数据

来自分类Dev

将批量数据从s3加载到redshift

来自分类Dev

将批量数据导入ArangoDB的最佳方法

来自分类Dev

批量更新表中的数据-最佳方法?

来自分类Dev

将数据批量/批量加载到 Apache Geode(Gemfire) 中有哪些选项?

来自分类Dev

从URL获取数据时显示加载指示符的正确方法是什么

来自分类Dev

用组合框将数据加载到表单中的正确方法是什么?

来自分类Dev

将数据从Django连续/延迟加载到Angular的正确方法是什么

来自分类Dev

异步数据加载后提交HTML表单的正确方法是什么?

来自分类Dev

在React Native中将数据源加载到listView的正确方法是什么

来自分类Dev

在Django中使用不同ID批量更新的正确方法

来自分类Dev

iOS应用的存档数据无法正确加载

来自分类Dev

Vue Infinite无法正确加载数据

来自分类Dev

DICOM 数据集加载不正确

来自分类Dev

使用 Python 3 将文件(由 Postgres 创建)批量加载到内存中的 SQLite 数据库的最快方法是什么?

来自分类Dev

使用Ajax加载无法正确加载数据表

来自分类Dev

批量加载列表

来自分类Dev

批量加载TFRecord文件

Related 相关文章

  1. 1

    在Hazelcast中批量加载数据的最佳方法

  2. 2

    更快地批量加载嵌套数据

  3. 3

    Ag-grid 批量调用数据加载

  4. 4

    将数据批量加载到Azure DocumentDB集合中的最佳方法

  5. 5

    在python中从json文件加载数据的正确方法

  6. 6

    json 无法正确加载数据

  7. 7

    在MEAN + Mongoose堆栈中的何处加载批量数据?

  8. 8

    从sybase数据库批量加载到HDFS

  9. 9

    将批量JSON数据加载到SQL Server表中

  10. 10

    如何使用带有不同编码的psql批量加载数据?

  11. 11

    IBM Bluemix:将数据批量加载到MongoDB中

  12. 12

    从Node.js批量加载titan db中的数据

  13. 13

    将批量数据从s3加载到redshift

  14. 14

    将批量数据导入ArangoDB的最佳方法

  15. 15

    批量更新表中的数据-最佳方法?

  16. 16

    将数据批量/批量加载到 Apache Geode(Gemfire) 中有哪些选项?

  17. 17

    从URL获取数据时显示加载指示符的正确方法是什么

  18. 18

    用组合框将数据加载到表单中的正确方法是什么?

  19. 19

    将数据从Django连续/延迟加载到Angular的正确方法是什么

  20. 20

    异步数据加载后提交HTML表单的正确方法是什么?

  21. 21

    在React Native中将数据源加载到listView的正确方法是什么

  22. 22

    在Django中使用不同ID批量更新的正确方法

  23. 23

    iOS应用的存档数据无法正确加载

  24. 24

    Vue Infinite无法正确加载数据

  25. 25

    DICOM 数据集加载不正确

  26. 26

    使用 Python 3 将文件(由 Postgres 创建)批量加载到内存中的 SQLite 数据库的最快方法是什么?

  27. 27

    使用Ajax加载无法正确加载数据表

  28. 28

    批量加载列表

  29. 29

    批量加载TFRecord文件

热门标签

归档