Matrix 在ApacheIgnite中存储大型矩阵

Matrix 在ApacheIgnite中存储大型矩阵,matrix,key-value,ignite,Matrix,Key Value,Ignite,我有一个大的整数矩阵,我希望能够切片和运行分析。我正在用ApacheIgnite制作这个原型 矩阵是50000列x 500万行。我希望能够在此矩阵上运行以下操作: 获取单个列的所有数据 获取某些随机行和列子集的所有数据 计算一行与另一行的相关系数 我想让你满意。二,。现在,但我不知道如何存储矩阵。我正在考虑这样存储矩阵: row1 { co1: val co2: val co3: val ... co50000: val } row2{ ... } 但我

我有一个大的整数矩阵,我希望能够切片和运行分析。我正在用ApacheIgnite制作这个原型

矩阵是50000列x 500万行。我希望能够在此矩阵上运行以下操作:

  • 获取单个列的所有数据
  • 获取某些随机行和列子集的所有数据
  • 计算一行与另一行的相关系数
  • 我想让你满意。二,。现在,但我不知道如何存储矩阵。我正在考虑这样存储矩阵:

    row1 {
        co1: val
        co2: val
        co3: val
        ...
        co50000: val
    }
    row2{ ... }
    
    但我不确定在Ignite中是否可以有这样复杂的数据类型,或者是否只能有一个键:值对。文件不清楚。当我尝试使用pyignite插入字典时(我的Java有点生疏,所以我现在坚持使用python),数据以数组的形式返回:

    >>> test.put('row2', { "col1": 50, "col2":0 })
    >>> test.get('cell2')
    ['gene1', 'gene2']
    

    我对ApacheIgnite还不熟悉,但文档中似乎没有详细说明如何实现这一点,或者它是否能够实现

    我认为您需要使用行作为键并包含50000列数组作为值来存储500万千伏对


    最好坚持使用基本类型。不确定如何最好地将其映射到Python。

    从瘦客户机的角度来看,Ignite缓存是平面的,而不是嵌套的。您可以将数组、序列、字典或以上任意组合作为值放入Ignite缓存中,但之后不能遍历缓存中的值。您只能检索整个值并查看它

    cache.get(row)[column]
    将起作用,但它将从缓存中以Python列表的形式检索50000个元素的整行,然后处理该列表中的单个元素。我认为你的情况是次优的


    如果我没弄错的话,面向JSON的数据库(如MongoDB或PostgreSQL的JSONB)具有您描述的特性。但我不知道它们是否足够快,可以进行数据分析。

    因为它是一个整数矩阵,我可能会使用一个整数作为键,使用一个整数数组作为值,因为这样会占用更少的内存。请注意,默认情况下,Ignite将数据以字节数组的形式存储在堆外,并且每次访问时都会对其值进行反序列化。为了避免反序列化,可以使用堆缓存模式。从您提供的代码片段中,不清楚您想要实现什么以及什么是错误的。我需要能够在列中指定某些值-我需要请求第1行、第50行、第600行以及第1行、第50000行和第6行。在这种情况下存储整个数组将无法工作,对吗?我需要能够在列中指定某些值-我需要请求行1、行50、行600以及col1、col50000和col6。存储整个数组在这种情况下不起作用,对吗?为什么,获取所需的整行,获取列。如果数据存储在数组中,如何指定列?
    cache.get(row)[column]
    ?我是新手,但如果它是数组,并且列名是随机字符串,我认为我们无法以这种方式访问数组。cache.get(row)[foo']不起作用。