Ruby 如何在Postgres中存储小数字列表

Ruby 如何在Postgres中存储小数字列表,ruby,postgresql,list,numbers,storage,Ruby,Postgresql,List,Numbers,Storage,我有一个很长的小数字列表,所有数字都小于16,但在一个唯一的列表中可能有10000多个 我以逗号分隔的列表形式获取值,如: 6,12,10,2,2,2,6,12,8,2,2,6,10,2,4,12,14,10,2, .... lots and lots of numbers 最后,我需要以最有效的方式将值存储在数据库中,以便重新读取和处理。。。作为字符串,逗号分隔的值 我想把它们存储在一个大的文本字段中。。。然而,我发现在其中添加所有逗号会浪费空间 我想知道对于这种情况是否有最佳实践 有关更多

我有一个很长的小数字列表,所有数字都小于16,但在一个唯一的列表中可能有10000多个

我以逗号分隔的列表形式获取值,如:

6,12,10,2,2,2,6,12,8,2,2,6,10,2,4,12,14,10,2, .... lots and lots of numbers
最后,我需要以最有效的方式将值存储在数据库中,以便重新读取和处理。。。作为字符串,逗号分隔的值

我想把它们存储在一个大的
文本
字段中。。。然而,我发现在其中添加所有逗号会浪费空间

我想知道对于这种情况是否有最佳实践

有关更多技术细节:


对于数据库,我必须使用Postgres(我是这个领域的初学者),编程语言是Ruby(也是初学者:)

对于快速且合理节省空间的解决方案,您只需编写一个十六进制字符串:

string = '6,12,10,2,2,2,6,12,8,2,2,6,10,2,4,12,14,10,2'

p string.split(',').map { |v| v.to_i.to_s(16) }.join
# "6ca2226c8226a24cea2"
p '6ca2226c8226a24cea2'.each_char.map { |c| c.to_i(16) }.join(',')
# "6,12,10,2,2,2,6,12,8,2,2,6,10,2,4,12,14,10,2"
它的优点是易于被任何数据库和任何程序读取

此外,即使字符串中有前导的
0
s:
“0,0,6”
,它也可以工作


如果元素数为偶数,则可以将2个十六进制字符压缩为一个字节,将字符串长度除以2。

要获得快速且合理节省空间的解决方案,只需编写一个十六进制字符串:

string = '6,12,10,2,2,2,6,12,8,2,2,6,10,2,4,12,14,10,2'

p string.split(',').map { |v| v.to_i.to_s(16) }.join
# "6ca2226c8226a24cea2"
p '6ca2226c8226a24cea2'.each_char.map { |c| c.to_i(16) }.join(',')
# "6,12,10,2,2,2,6,12,8,2,2,6,10,2,4,12,14,10,2"
它的优点是易于被任何数据库和任何程序读取

此外,即使字符串中有前导的
0
s:
“0,0,6”
,它也可以工作


如果元素数为偶数,则可以将2个六进制字符打包成一个字节,将字符串长度除以2。

如何对它们进行编码(0点击
方法,直到
触感良好。我不知道是否会发生这种情况,但您的方法会忽略前导的
0
值。编辑:我是说领导!没有多余的轨迹零点:)用
轻触
方法,直到
触感良好。我不知道是否会发生这种情况,但您的方法会忽略前导的
0
值。编辑:我是说领导!没有多余的轨迹零点:)我喜欢这个解决方案,因为它简单易读。能够通过查看来判断数据是否正常是很重要的。它还有一个优点,就是您可以索引到数据中。要获得第五个值(当然是从零开始计数),请执行str[5]。To_i(16)
。我喜欢这个解决方案,因为它简单易读。能够通过查看来判断数据是否正常是很重要的。它还有一个优点,就是您可以索引到数据中。要获得第五个值(当然是从零开始计数),请执行
str[5]。To_i(16)