#vertica
#vertica
Вопрос:
У меня 3-узловой кластер. Существует 1 база данных и 1 таблица. Я не создал проекцию. Если я загружу 100 строк в таблицу с помощью команды копирования, то:
- Сколько проекций будет создано? Я подозреваю, что только 1 суперпроекция, я прав?
- Если я использую
segmentation
, будет ли это равномерно распределять данные (~ 33 строки) на узел? Означает ли это, что теперь у меня есть 3 чтенияOptimised Storage (ROS)
по одному на узел, а проекция имеет 3ROS
es? - Если я использую
KSafety
значение как 1, то копия каждогоROS
(бадди) будет сохранена в другом узле? Итак, теперь у меня есть 6ROS
es, каждый из которых содержит 33 строки?
Ответ №1:
Что ж, давайте разыграем сценарий … Вы увидите, что получаете проекцию и ее идентичную вспомогательную проекцию … И вы можете запросить каталог, чтобы подсчитать строки и определить проекции..
-- load a file with 100 random generated rows into table example;
-- generate the rows from within Vertica, and export to file
-- then create a new table and see what the projections look like
CREATE TABLE rows100 AS
SELECT
(ARRAY['Ann','Lucy','Mary','Bob','Matt'])[RANDOMINT(5)] AS fname,
(ARRAY['Lee','Ross','Smith','Davis'])[RANDOMINT(4)] AS lname,
'2001-01-01'::DATE RANDOMINT(365*10) AS hdate,
(10000 RANDOM()*9000)::NUMERIC(7,2) AS salary
FROM (
SELECT tm FROM (
SELECT now() INTERVAL ' 1 second' AS t UNION ALL
SELECT now() INTERVAL '100 seconds' AS t -- Creates 100 rows
) x TIMESERIES tm AS '1 second' OVER(ORDER BY t)
) y
;
-- set field separator to vertical bar (the default, actually...)
pset fieldsep '|'
-- toggle to tuples only .. no column names and no row count
tuples_only
-- spool to example.bsv - in bar-separated-value format
o example.bsv
SELECT * FROM rows100;
-- spool to file off - closes output file
o
-- create a table without bothering with projections matching the test data
DROP TABLE IF EXISTS example;
CREATE TABLE example LIKE rows100;
-- load the new table ...
COPY example FROM LOCAL 'example.bsv';
-- check the nodes ..
SELECT node_name FROM nodes;
-- out node_name
-- out ----------------
-- out v_sbx_node0001
-- out v_sbx_node0002
-- out v_sbx_node0003
SELECT
node_name
, projection_schema
, anchor_table_name
, projection_name
, row_count
FROM v_monitor.projection_storage
WHERE anchor_table_name='example'
ORDER BY projection_name, node_name
;
-- out node_name | projection_schema | anchor_table_name | projection_name | row_count
-- out ---------------- ------------------- ------------------- ----------------- -----------
-- out v_sbx_node0001 | public | example | example_b0 | 38
-- out v_sbx_node0002 | public | example | example_b0 | 32
-- out v_sbx_node0003 | public | example | example_b0 | 30
-- out v_sbx_node0001 | public | example | example_b1 | 30
-- out v_sbx_node0002 | public | example | example_b1 | 38
-- out v_sbx_node0003 | public | example | example_b1 | 32
Комментарии:
1. Спасибо. Правильно ли я суммирую
when data is loaded then V* creates one super projection (b0). It seems default settings are Segmentation (ALL NODES) and KSAFETY 1. Segmentation causes approx. equal distribution of data among 3 nodes (n1 (b0 33),n2 (b0 32),n3 (b0 35)). But in this scenario, if any node fails then I don't have all the data. So Ksafety =1 creates another projection b1 which creates copies of data in neighbouring nodes (n1 (b1 35),n2 (b1 33),n3 (b1 32)). In summary, I get 2 super projection (b0 and b1), 2 ros containers per node (eg n1 (b1 35, b0 33))
2. Проекция либо несегментирована — тогда у нее есть одна копия всех ее данных на каждом узле; или она сегментирована (это значение по умолчанию; если первичного ключа нет, это хэш () первых 8 столбцов, иначе первичный ключ); тогда существует какмногие части общего объема данных — сегменты — на каждом узле — по мере наличия узлов. По умолчанию K-Safety равен 1 — это означает, что один узел может выйти из строя без удаления базы данных, и это реализуется за счет наличия одной идентичной копии сегментированной проекции со смещением 1: копия первого сегмента находится как на первом, так и на втором узле и т.д.
3. для
Ksafety=1
и для несегментированных проекций в 3-узловом кластере будет 2 копии проекции (все данные в каждом узле)?4. нет. для сегментированных проекций, 2 копии: базовая проекция и вспомогательная проекция. для несегментированных — по одному на узел. У вас есть все данные несегментированных проекций, даже если все узлы, кроме одного, отключены.