Monthly Archives: Апрель 2019

PostgreSQL размер таблиц и индексов

Надыбал такой запрос, который вытягивает размеры таблиц и их индексов, а также суммарный размер:
SELECT
    TABLE_NAME,
    pg_size_pretty(table_size) AS table_size,
    pg_size_pretty(indexes_size) AS indexes_size,
    pg_size_pretty(total_size) AS total_size
FROM (
    SELECT
        TABLE_NAME,
        pg_table_size(TABLE_NAME) AS table_size,
        pg_indexes_size(TABLE_NAME) AS indexes_size,
        pg_total_relation_size(TABLE_NAME) AS total_size
    FROM (
        SELECT ('"' || table_schema || '"."' || TABLE_NAME || '"') AS TABLE_NAME
        FROM information_schema.tables
    ) AS all_tables
    ORDER BY total_size DESC
) AS pretty_sizes

Суффиксный массив на Java за N*log^2(N)

public static int[] getSuffixArray(String s) {

    System.out.println(s);

    int N = s.length();

    int steps = Integer.bitCount(Integer.highestOneBit(N) - 1);

    int rank[][] = new int[steps + 1][N];

    for (int i = 0; i < N; i++) {
        rank[0][i] = s.charAt(i) - 'a';
    }

    Tuple tuples[] = new Tuple[N];

    for (int step = 1, cnt = 1; step <= steps; step++, cnt <<= 1) {
        for (int i = 0; i < N; i++) {
            Tuple tuple = new Tuple();
            tuple.firstHalf = rank[step - 1][i];
            tuple.secondHalf = i + cnt < N ? rank[step - 1][i + cnt] : -1;
            tuple.originalIndex = i;

            tuples[i] = tuple;
        }

        Arrays.sort(tuples);

        rank[step][tuples[0].originalIndex] = 0;

        for (int i = 1, currRank = 0; i < N; i++) {
            if(!tuples[i - 1].firstHalf.equals(tuples[i].firstHalf)
                    || tuples[i - 1].secondHalf.equals(tuples[i].secondHalf)) {
                ++currRank;
            }
            rank[step][tuples[i].originalIndex] = currRank;
        }


    }

    int suffixArray[] = new int[N];

    for (int i = 0; i < N; i++) {
        suffixArray[i] = tuples[i].originalIndex;
    }

    return suffixArray;
}

static class Tuple implements Comparable {
    Integer originalIndex;  // хранит оригинальный индекс суффикса
    Integer firstHalf;      // хранит ранг первой половины суффикса
    Integer secondHalf;     // хранит ранг второй половины суффикса


    @Override
    public int compareTo(Tuple tuple) {
        return this.firstHalf.equals(tuple.firstHalf)
                ? this.secondHalf.compareTo(tuple.secondHalf)
                : this.firstHalf.compareTo(tuple.firstHalf);
    }

    @Override
    public String toString() {
        return "Tuple{" +
                "originalIndex=" + originalIndex +
                ", firstHalf=" + firstHalf +
                ", secondHalf=" + secondHalf +
                '}';
    }
}

Перевод времени на сервере

Когда мы тестируем нашу систему, часто возникает необходимость в переводе времени на сервере. У нас используются операционные системы Ubuntu и CentOS, поэтому команды будут для них. Ubuntu # Отключаем службу NTP (если она установлена и включена), которая синхронизирует время и помещает вам перевести время
sudo timedatectl set-ntp off
# Переводим времени, время указывается в формате ЧЧ:ММ:CC
sudo date +%T -s "11:14:00"
CentOS # Смена текущей даты в формате ГГГГММДД (время при этом обнуляется 00:00:00)
sudo date +%Y%m%d -s "20190413"
# Переводим времени, время указывается в формате ЧЧ:ММ:CC
sudo date +%T -s "10:48:56"
TAG: , ,