Pro баз данных как BigTable, SimpleDB

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

16
задан Community 23 May 2017 в 10:31
поделиться

4 ответа

Распределенные базы данных не вполне так наивны, как Orion подразумевает; было довольно мало работы, сделанной при оптимизации полностью реляционных запросов по распределенным наборам данных. Можно хотеть посмотреть на то, какие компании как Teradata, Netezza, Greenplum, Vertica, AsterData, и т.д. делают. (Oracle вошла в игру, наконец, также, с их недавним объявлением; Microsoft купила их солитон от имени компании, которая раньше называлась DataAllegro).

Однако когда данные увеличиваются в терабайты, эти проблемы становятся очень нетривиальными. Если Вам не нужен строгий transactionality, и непротиворечивость гарантирует, что можно добраться от RDBMS, часто намного легче денормализовать и не сделать соединения. Особенно, если Вы не должны перекрестно ссылаться на много. Особенно, если Вы не делаете специального анализа, но требуете программируемого доступа с произвольными преобразованиями.

Денормализация переоценена. Просто, потому что это - то, что происходит, когда Вы имеете дело с 100 Tera, не означает, что этот факт должен использоваться каждым разработчиком, который никогда не потрудился узнавать о базах данных и испытывает затруднения при запросах миллиона или двух строк из-за плохого планирования схемы и оптимизации запросов.

, Но если Вы находитесь в 100 диапазонах Tera, любой ценой...

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

В менее глобальном масштабе, я настоятельно рекомендую BerkeleyDB для тех видов проблем.

16
ответ дан 30 November 2019 в 16:59
поделиться

Я не слишком знаком с ними (я читал только те же блоги / новости / примеры, что и все остальные), но я полагаю, что они решили пожертвовать многими обычными функциями реляционных БД в названии. масштабируемости - попробую объяснить.

Представьте, что у вас есть 200 строк в вашей таблице данных.

В центре обработки данных Google 50 из этих строк хранятся на сервере A, 50 на B и 100 на сервере C. Кроме того, сервер D содержит избыточные копии данных с серверов A и B, а сервер E содержит избыточные копии данных на сервер С.

(В реальной жизни я понятия не имею, сколько серверов будет использоваться, но он настроен на работу со многими миллионами строк, поэтому я представляю довольно много).

Чтобы "выбрать *, где name = 'orion'", инфраструктура может запустить этот запрос ко всем серверам и агрегировать результаты, которые возвращаются. Это позволяет им линейно масштабировать столько серверов, сколько им нужно (к вашему сведению, это почти то же, что и mapreduce)

Это, однако, означает, что вам нужны некоторые компромиссы.

Если вам нужно было выполнить реляционное объединение для некоторых данных, где они были распределены, скажем, по 5 серверам, каждый из этих серверов должен был бы получать данные из каждого другого для каждой строки . Попробуйте сделать это, когда у вас есть 2 миллиона строк на 10 серверах.

Это приводит к компромиссу № 1 - нет присоединений.

Кроме того, в зависимости от задержки в сети, нагрузки на сервер и т. Д. Некоторые из ваших данных могут быть сохранены мгновенно, но некоторые могут занять секунду или 2. Опять же, когда у вас есть десятки серверов, это становится длиннее и дольше, и нормальный подход «все просто ждут, пока самый медленный парень закончил» больше не становится приемлемым.

Это приводит к компромиссу №2. Ваши данные не всегда могут быть сразу видны после их записи.

Я не уверен, какие есть другие компромиссы, но, в общем-то, это главные 2.

14
ответ дан 30 November 2019 в 16:59
поделиться

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

Это кажется довольно разумным, когда Вы храните в основном инвариантные данные единственного типа (Как Google, делает). Я на правильном пути здесь?

4
ответ дан 30 November 2019 в 16:59
поделиться

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

2
ответ дан 30 November 2019 в 16:59
поделиться
Другие вопросы по тегам:

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