2011-09-23 66 views
0

我有一个1000x1000矩阵,每个条目中都有一些数据。按偏移量访问表(?)

是否有可能在表中顺序存储它(即,前一行旁边的一行)?我的意思是,如果我可以通过偏移量访问表(就像数组一样),由于我不会添加/删除任何条目,我会节省键的空间,这在这里显然是多余的。

可能吗?谢谢!

+0

RDBMS是什么?矩阵元素是什么数据类型?他们固定长度? –

+0

我打算使用SQLite。这些元素由一个固定长度的结构组成。 – Metz

回答

0

表格没有订单。他们没有顺序。关键不是多余的,因为它告诉你如何访问你的数据。如果我模拟这个我会做它像这样:

CREATE TABLE My_Matrix AS (
    row_num SMALLINT NOT NULL, 
    col_num SMALLINT NOT NULL, 
    value  INT   NOT NULL, -- Or whatever data type is appropriate 
    CONSTRAINT PK_My_Matrix PRIMARY KEY CLUSTERED (row_num, col_num), 
    CONSTRAINT My_Matrix_row_num_chk CHECK (row_num BETWEEN 1 AND 1000), 
    CONSTRAINT My_Matrix_col_num_chk CHECK (col_num BETWEEN 1 AND 1000) 
) 

现在,如果你想获得的行数和列数的值,那么你可以迅速得到与:

SELECT value FROM My_Matrix WHERE row_num = @row_num AND col_num = @col_num 

如果你想通过一个偏移量,那么你可以使用像得到它:

SELECT 
    value 
FROM 
    My_Matrix 
WHERE 
    row_num = @value%1000 AND 
    col_num = @value/1000 

至于节省存储,你说的每行约在这里4个字节,与具有最多100万行的矩阵。对于任何严重的RDBMS来说,这是非常不相关的。

0

一百万行是一个相当小的表,所以我开始假设是类似以下内容:

CREATE TABLE tbl1 (x INT NOT NULL, y INT NOT NULL, ... some data ... , PRIMARY KEY (x,y));