Как базы данных работают внутренне? [закрытый]

Короче нет. Однако вы можете показать все загруженные классы. Итак, сначала вам нужно загрузить все файлы классов в пространстве имен:

Dir["#{File.dirname(__FILE__)}/lib/foo/*.rb"].each {|file| load file}

, тогда вы можете использовать метод Jörg W Mittag для списка классов

Foo.constants. map (& amp; Foo.method (: const_get)). grep (класс)

77
задан Gulzar Nazim 11 October 2008 в 05:23
поделиться

5 ответов

, Что база данных на самом деле делает для обнаружения то, что соответствует избранному оператору?

Грубо говоря, это - вопрос грубой силы. Просто, это прочитывает каждую запись кандидата в базе данных и соответствует выражению к полям. Так, если у Вас есть "выбор * от таблицы, где имя = 'fred'", это буквально пробегает каждую запись, захватывает поле "имени" и сравнивает его с 'fred'.

Теперь, если "table.name" поле будет индексировано, то база данных будет (вероятно, но не обязательно) используют индекс сначала для определения местоположения записей кандидата для применения фактического фильтра к.

Это сокращает количество записей кандидата для применения выражения к, иначе это просто сделает то, что мы называем "сканированием таблицы", т.е. читаем каждую строку.

, Но существенно, однако это располагается, записи кандидата является отдельным от того, как это применяет фактическое выражение фильтра, и, очевидно, существует некоторая умная оптимизация, которая может быть сделана.

, Как база данных интерпретирует соединение по-другому к запросу с несколькими "где key1 = key2" операторы?

ну, соединение используется для создания новой "псевдо таблицы", на которую применяется фильтр. Так, у Вас есть критерии фильтра и критерии соединения. Критерии соединения используются для создания этой "псевдо таблицы", и затем фильтр применяется против этого. Теперь, при интерпретации соединения, это - снова та же проблема как фильтр - сравнения грубой силы и индекс читают для создания подмножества для "псевдо таблицы".

, Как база данных хранит всю свою память?

Один из ключей к хорошей базе данных - то, как это управляет своими буферами ввода-вывода. Но это в основном соответствует блокам RAM к дисковым блокам. С современными диспетчерами виртуальной памяти более простая база данных может почти полагаться на VM как на своего менеджера по буферу памяти. DB высокого класса делает все это самостоятельно.

, Как индексы сохранены?

B+Trees обычно, необходимо искать его. Это - прямая техника, которая была вокруг в течение многих лет. Это - преимущество, совместно используется с большей частью любого сбалансированного дерева: последовательный доступ к узлам, плюс все вершины связаны так, можно легко пересечь от узла до узла в ключевом порядке. Так, с индексом строки можно считать "отсортированными" для определенных полей в базе данных, и база данных может усилить ту информацию к ней преимущество для оптимизации. Это отлично от, скажем, использования хэш-таблицы для индекса, который только позволяет Вам добраться до определенной записи быстро. В B-дереве можно быстро добраться не только до определенной записи, но и до точки в рамках отсортированного списка.

фактическая механика хранения и индексации строк в базе данных является действительно довольно прямой и хорошо понята. Игра управляет буферами и преобразовывает SQL в в эффективные пути запроса для усиления этих основных идиом устройства хранения данных.

Затем существуют целые мультипользователи, блокировка, вход и сложность транзакций сверху идиомы устройства хранения данных.

81
ответ дан Will Hartung 6 November 2019 в 03:46
поделиться
  • , Что база данных на самом деле делает для обнаружения то, что соответствует избранному оператору?

    DBS использует индексы (см. ниже)

  • , Как база данных интерпретирует соединение по-другому к запросу с несколькими "где key1 = key2" операторы? Операции соединения могут быть переведены в операции двоичного дерева путем слияния деревьев.

  • , Как база данных хранит всю свою память?

    файлы с отображенной памятью для более быстрого доступа их данных

  • , Как индексы сохранены?

    Внутренне DBS работают с [1 117] B-деревья для индексации.

Это должно быть объяснено в больших деталях о Википедии..

http://en.wikipedia.org/wiki/B-tree

http://en.wikipedia.org/wiki/Database

4
ответ дан Peter Parker 6 November 2019 в 03:46
поделиться

В дополнение к чтению это может быть поучительно для использования инструментов DB для исследования плана выполнения, который база данных использует на запросах. В дополнение к получению понимания, как это работает, можно экспериментировать с методами для оптимизации запросов с лучшей обратной связью.

1
ответ дан Turnkey 6 November 2019 в 03:46
поделиться

Если бы Вы хотите знать больше подробно, я рекомендовал бы получить sqlite источники и взглянуть на то, как это делает это. Это завершено, хотя не в масштабе больших и коммерческих баз данных с открытым исходным кодом. Если Вы хотите знать больше подробно, что я рекомендую Полное руководство SQLite, который не является только большим объяснением sqlite, но также и одной из большинства читаемых технических книг, я знаю. На стороне MySQL Вы могли учиться от , MySQL Performance Blog , а также на книге выходит на MySQL (V2) O'Reilly High Performance, которого блог является одним из авторов.

0
ответ дан dajobe 6 November 2019 в 03:46
поделиться

Saif, превосходная ссылка. Обзор птичьего глаза, которому удается затронуть большинство тем и предоставить подробную информацию об определенных реализациях поставщика.

я сделал три попытки при записи объяснения, но это - действительно слишком большая тема. Проверьте статью Hellerstein (та на сервере Беркли что Saif, связанный с), и затем спросите о специфических особенностях.

стоит отметить, что только подмножество "известных хороших идей" реализовано в любом данном DBMS. Например, SQLite даже не делает хэширований, он только делает вложенные циклы (ack!!). Но тогда, это - легко встраиваемая DBMS, и это делает свою работу очень хорошо, таким образом, существует что-то, чтобы быть сказанным из-за отсутствия сложности.

Приобретение знаний о том, как DBMS собирает статистику и как это использует их для построения планов запросов, а также изучения, как прочитать планы запросов во-первых, является неоценимым навыком - если необходимо выбрать одну "тему" внутренностей базы данных для изучения, изучить это. Это сделает мир различия (и Вы никогда не будете случайно писать Декартово произведение снова...;-)).

0
ответ дан SquareCog 6 November 2019 в 03:46
поделиться
Другие вопросы по тегам:

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