Сколько контейнеров ROS будет создано, если я загружаю таблицу со 100 строками в 3-узловом кластере

#vertica

#vertica

Вопрос:

У меня 3-узловой кластер. Существует 1 база данных и 1 таблица. Я не создал проекцию. Если я загружу 100 строк в таблицу с помощью команды копирования, то:

  1. Сколько проекций будет создано? Я подозреваю, что только 1 суперпроекция, я прав?
  2. Если я использую segmentation , будет ли это равномерно распределять данные (~ 33 строки) на узел? Означает ли это, что теперь у меня есть 3 чтения Optimised Storage (ROS) по одному на узел, а проекция имеет 3 ROS es?
  3. Если я использую KSafety значение как 1, то копия каждого ROS (бадди) будет сохранена в другом узле? Итак, теперь у меня есть 6 ROS 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 копии: базовая проекция и вспомогательная проекция. для несегментированных — по одному на узел. У вас есть все данные несегментированных проекций, даже если все узлы, кроме одного, отключены.