Есть ли какая-либо логическая причина наличия другой табличной области для индексов?

Quicksort имеет лучшую среднюю сложность случая, но в некоторых приложениях это - неправильный выбор. Quicksort уязвим для атак "отказ в обслуживании". Если взломщик может выбрать вход, который будет отсортирован, он может легко создать набор, который берет худшую временную сложность случая o (n^2).

средняя сложность случая Сортировки с объединением и худшая сложность случая являются тем же, и как таковой не переносит той же проблемы. Это свойство сортировки с объединением также делает его превосходящим выбором для систем реального времени - точно, потому что нет патологических случаев, которые заставляют его работать очень, намного медленнее.

я - более крупный поклонник Сортировки с объединением, чем я имею Quicksort по этим причинам.

12
задан Vadzim 20 January 2012 в 14:24
поделиться

2 ответа

Широко распространено мнение, что хранение индексов и таблиц в отдельных табличных пространствах повышает производительность. Сейчас многие уважаемые эксперты считают это мифом (см. эту ветку «Спроси Тома» - ищите «миф» ), но до сих пор это обычная практика, потому что от старых привычек трудно избавиться!

Стороннее редактирование

] Выдержка из asktom: "Index Tablespace" из 2001 для Oracle версии 8.1.6 вопрос

  • Сохранять ли индексы в собственном табличном пространстве - это хорошая идея?
  • Повышает ли это производительность или это скорее проблема восстановления?
  • Отличается ли ответ от платформы к платформе?

Первая часть ответа

Yes, no, maybe.

The idea, born in the 1980s when systems were tiny and user counts were in the single 
digits, was that you separated indexes from data into separate tablespaces on different 
disks.

In that fashion, you positioned the head of the disk in the index tablespace and the head 
of the disk in the data tablespace and that would be better then seeking 2 times on the 
same disk.

Drives back then were really slow at seeking and typically measured in the 10's to 100's 
of megabytes (if you were lucky)


Today, with logical volumes, raid, NN gigabyte (nn is rapidly becoming NNN gigabytes) 
drives, hundreds/thousands of concurrent users, thousands of tables, 10's of thousands of 
indexes - this sort of "optimization" is sort of impossible.

What you strive for today is to be able to manage things, to spread IO out evenly 
avoiding hot spots.

Since I believe all things should be in locally managed tablespaces with UNIFORM extent 
sizes, I would say that yes, indexes would be in a different tablespace from the data but 
only because they are a different SIZE then the data.  My table with 50 columns and an 
average row size of 4k might belong in a tablespace that has 5meg extents whereas the 
index on a single number column might belong in a tablespace with 512k or 1m extents.

I tend to keep my indexes separate from the data but for the above sizing reason.  The 
tablespaces frequently end up on the same exact mount points.  You strive for even io 
across your disks and you may end up with indexes and data on the same devices. 
17
ответ дан 2 December 2019 в 18:19
поделиться
class Application {
    protected static $_singletonFoo=NULL;

    public static function foo() {
        if(NULL === self::$_singletonFoo) {
            self::$_singletonFoo = new Foo;
        }
        return self::$_singletonFoo;
    }

}

Я бы сделал это так. Он создает объект по запросу:

Application::foo()->bar();

Я так и делаю, он уважает принципы ООП, это меньше кода, чем то, как вы » мы делаем это прямо сейчас, и объект создается только тогда, когда он нужен коду впервые.

Примечание : то, что я представил, даже не является настоящим одноэлементным шаблоном. Синглтон допускает только один экземпляр самого себя, определяя конструктор (Foo :: __ constructor ()) как закрытый. Это только «глобальная» переменная, доступная для всех экземпляров «Приложения». Вот почему я считаю его использование правильным, поскольку оно НЕ игнорирует хорошие принципы ООП. Конечно, как и все остальное в мире, этим «шаблоном» тоже не следует злоупотреблять!

Я видел, как он используется во многих фреймворках PHP, в том числе в Zend Framework и Yii. И вы должны использовать фреймворк. Я не скажу вам, какой именно.

Приложение

Примечание : то, что я представил, даже не является настоящим одноэлементным шаблоном. Синглтон допускает только один экземпляр самого себя, определяя конструктор (Foo :: __ constructor ()) как закрытый. Это только «глобальная» переменная, доступная для всех экземпляров «Приложения». Вот почему я считаю его использование правильным, поскольку оно НЕ игнорирует хорошие принципы ООП. Конечно, как и все остальное в мире, этим «шаблоном» тоже не следует злоупотреблять!

Я видел, как он используется во многих фреймворках PHP, в том числе в Zend Framework и Yii. И вы должны использовать фреймворк. Я не скажу вам, какой именно.

Приложение

Примечание : то, что я представил, даже не является настоящим одноэлементным шаблоном. Синглтон допускает только один экземпляр самого себя, определяя конструктор (Foo :: __ constructor ()) как закрытый. Это только «глобальная» переменная, доступная для всех экземпляров «Приложения». Вот почему я считаю его использование правильным, поскольку оно НЕ игнорирует хорошие принципы ООП. Конечно, как и все остальное в мире, этим «шаблоном» тоже не следует злоупотреблять!

Я видел, как он используется во многих фреймворках PHP, в том числе в Zend Framework и Yii. И вы должны использовать фреймворк. Я не скажу вам, какой именно.

Приложение Для тех из вас, кто беспокоится о TDD , вы все равно можете сделать некоторую проводку для внедрения зависимостей. Это может выглядеть так:

class Application {
        protected static $_singletonFoo=NULL;
        protected static $_helperName = 'Foo';

        public static function setDefaultHelperName($helperName='Foo') {
                if(is_string($helperName)) {
                        self::$_helperName = $helperName;
                }
                elseif(is_object($helperName)) {
                        self::$_singletonFoo = $helperName;
                }
                else {
                        return FALSE;
                }
                return TRUE;
        }
        public static function foo() {
                if(NULL === self::$_singletonFoo) {
                        self::$_singletonFoo = new self::$_helperName;
                }
                return self::$_singletonFoo;
        }
}

Здесь достаточно возможностей для улучшения. Это просто PoC, используйте свое воображение.

Почему это так? Что ж, в большинстве случаев приложение не будет проходить модульное тестирование, оно будет запущено , надеюсь, в производственной среде . Сила PHP - в его скорости. PHP НЕ является и никогда не будет «чистым языком ООП», как Java.

В приложении есть только один класс Application и не более одного экземпляра каждого из его помощников (в соответствии с ленивой загрузкой, как указано выше). Конечно, синглтоны - это плохо, но опять же, только если они не соответствуют реальному миру. В моем примере это так.

Стереотипные "правила" вроде " когда пользователей было не так много, а размер баз данных был не слишком велик. В то время было полезно хранить индексы и таблицы в разных физических томах.

Теперь есть логические тома, raid и так далее, и нет необходимости хранить индексы и таблицы в разных табличных пространствах.

Но все табличные пространства должны управляться локально с единым размером расширений. С этой точки зрения индексы должны храниться в другом табличном пространстве, поскольку таблица с 50 столбцами может храниться в табличном пространстве с расширенным размером 5 МБ, когда табличного пространства для индексов будет достаточно 512 КБ расширенного размера.

raid и т. д., и нет необходимости хранить индексы и таблицы в разных табличных пространствах.

Но все табличные пространства должны управляться локально с единым размером расширений. С этой точки зрения индексы должны храниться в другом табличном пространстве, поскольку таблица с 50 столбцами может храниться в табличном пространстве с расширенным размером 5 МБ, когда табличного пространства для индексов будет достаточно 512 КБ расширенного размера.

raid и т. д., и нет необходимости хранить индексы и таблицы в разных табличных пространствах.

Но все табличные пространства должны управляться локально с единым размером расширений. С этой точки зрения индексы должны храниться в другом табличном пространстве, поскольку таблица с 50 столбцами может храниться в табличном пространстве с расширенным размером 5 МБ, когда табличного пространства для индексов будет достаточно 512 КБ расширенного размера.

2
ответ дан 2 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: