|
|
|
Поветуйте БД + структуру таблиц для большого индекса
|
|||
|---|---|---|---|
|
#18+
Посоветуйте, какую базу данных+ движок таблиц (бесплатную + unix) лучше выбрать для этого всего? Есть поле 'a' и его свойства b,c,d – которые сами между собой не связываются. Нужно выбрать структуру данных для хранения примерно 700 млн. (лучше 1-2 млрд) записей. Практически все запросы будут SELECT. То есть это что то вроде индексной базы, которую можно обновлять апдейтами отдельно, а потом подменять старые данные новыми на уровне rename table, то есть актуальность и целостность базы не критична. Предусмотреть возможность масштабирования при большой нагрузке. Обычный первый вариант: CREATE TABLE `very_big_table` ( `a` varchar(255) NOT NULL, `b` varchar(50) default NULL, `c` varchar(50) default NULL, `d` varchar(50) default NULL, `created` datetime NOT NULL, `updated` datetime default NULL, PRIMARY KEY (`a`), KEY `b` (`b`), KEY `c` (`c`), KEY `d` (`d`), KEY `updated` (`updated`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Запросы, которые будут производиться: SELECT a FROM very_big_table WHERE b = 'some_string'; SELECT a FROM very_big_table WHERE c = 'some_string'; SELECT a FROM very_big_table WHERE d = 'some_string'; SELECT a FROM very_big_table ORDER BY updated LIMIT n; Второй вариант — вертикально разбиваем на 5 таблиц CREATE TABLE `big_table_a` ( `a` varchar(255) NOT NULL, `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`a`), KEY `updated` (`updated`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `big_table_b` ( `b` varchar(50) NOT NULL, `a` varchar(255) NOT NULL, `created` datetime NOT NULL, `updated` datetime default NULL, PRIMARY KEY (`b`,`a`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `big_table_c` ( `c` varchar(50) NOT NULL, `a` varchar(255) NOT NULL, `created` datetime NOT NULL, `updated` datetime default NULL, PRIMARY KEY (`c`,`a`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `big_table_d` ( `d` varchar(50) NOT NULL, `a` varchar(255) NOT NULL, `created` datetime NOT NULL, `updated` datetime default NULL, PRIMARY KEY (`d`,`a`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Запросы: SELECT a FROM big_table_b WHERE b = 'some_string'; SELECT a FROM big_table_c WHERE c = 'some_string'; SELECT a FROM big_table_d WHERE d = 'some_string'; SELECT a FROM big_table_a ORDER BY updated LIMIT n; В этом случае можно разнести данные на разные физические сервера. Может есть какие то более выгодные варианты? Спасибо заранее всем откликнувшимся. P.S. Вопрос масштабирования особо актуален. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 14:47 |
|
||
|
Поветуйте БД + структуру таблиц для большого индекса
|
|||
|---|---|---|---|
|
#18+
Илья ЛуценкоВ этом случае можно разнести данные на разные физические сервера. Может есть какие то более выгодные варианты? P.S. Вопрос масштабирования особо актуален.Есть более промышленные - КЛАСТЕР. Именно это вы и пытаетесь изобразить своими доморощенными предложениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 15:49 |
|
||
|
Поветуйте БД + структуру таблиц для большого индекса
|
|||
|---|---|---|---|
|
#18+
Илья Луценко Может есть какие то более выгодные варианты? Есть, конечно - VARCHAR на BIGINT заменить, тем более что есть подозрение такое, что в столбцах b,c,d будет масса повторяющихся значений. Или не будет? Зачем вообще это рассматривать в отрыве от проблемной области и предполагаемых алгоримов обработки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2008, 17:11 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=96&tid=1543582]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 327ms |

| 0 / 0 |
