powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Помогити с нереляционными(встраиваемыми) СУБД
15 сообщений из 40, страница 2 из 2
Помогити с нереляционными(встраиваемыми) СУБД
    #36998098
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Я не знаю, сколько она там может обрабатывать запросов (Олег Оленин разгонял скорость до 80 тыс запросов в секунду на запись, но это нужно постараться)

Хм, а зачем на запись-то разгонять? Скорость записи лимитируется, в основном, скоростью seek на жестком диске - и примерно одинаковая для всех БД.

80000 - это или включен кэш на запись или данные записываются большими блоками или и то и другое :)
Оба случая - не интересны :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #36998697
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Блок А.Н.Я не знаю, сколько она там может обрабатывать запросов (Олег Оленин разгонял скорость до 80 тыс запросов в секунду на запись, но это нужно постараться)

Хм, а зачем на запись-то разгонять? Скорость записи лимитируется, в основном, скоростью seek на жестком диске - и примерно одинаковая для всех БД.

80000 - это или включен кэш на запись или данные записываются большими блоками или и то и другое :)
Оба случая - не интересны :)
Действительно, не интересны. А если не то и не другое?
Посмотрите пример на Java для записи данных и проверьте лично.

Если нужно ещё быстрее (без объектных удобств), то вот Java-пример работы c СУБД Caché на уровне "ключ(и)/значение":
Пример работы с 3000000 "записями"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
// Демонстрационный пример производительности СУБД Caché при использовании MultiDimensional Storage API

import java.sql.*;
import com.intersys.mds.MDSNodeReference;
import com.intersys.mds.MDSSession;
import com.intersys.mds.MDSSessionFactory;
import com.intersys.mds.jni.MDSUtilsJNI;

class MDSDemo {

  public static void main(String[] args) {
    String namespc = "USER";
    String url = "jdbc:Cache://SPCHOST:1972/" + namespc;
    String user = "_SYSTEM";
    String password = "SYS";

    Connection jdbcConnection = null;
    try {
      Class.forName("com.intersys.jdbc.CacheDriver");
      jdbcConnection = DriverManager.getConnection(url, user, password);

      MDSSession session = MDSSessionFactory.createJNISession();
      session.connect(namespc, user, password);

      int start = MDSUtilsJNI.getCurrentMs();

      MDSNodeReference ref = session.createNodeReference("del.a");
      ref.kill(); //удаление данных
      ref.setSubscript( 1 , "a");
      for (int i =  1 ; i <=  3000000 ; i++) {
        ref.setSubscript( 2 , i);
        ref.set(i); // эквивалентно на сервере set ^del.a("a",i)=i
      }
      int end = MDSUtilsJNI.getCurrentMs();
      System.out.println("Запись данных за " + (end - start) /  1000  + " с. "
          + (end - start) %  1000  + " мс.");
      
      start = MDSUtilsJNI.getCurrentMs();

      long val =  0 ;
      ref.setSubscript( 1 , "a");
      for (int i =  1 ; i <=  3000000 ; i++) {
        ref.setSubscript( 2 , i);
        val += ref.getInt(); // эквивалентно на сервере set val=val+^del.a("a",i)
      }
      System.out.println("Сумма = " + val);

      end = MDSUtilsJNI.getCurrentMs();
      System.out.println("Чтение данных за " + (end - start) /  1000  + " с. "
          + (end - start) %  1000  + " мс.");

      session.end();
      
    } catch (Exception e) {
      System.out.println("Пойманное Исключение: " + e.getMessage());
    } finally {
      System.out.println("Завершение сессии.");
      try {
        if (jdbcConnection != null)
          jdbcConnection.close();
      } catch (Exception e) {
        System.out.println("Пойманное Исключение при отключении: "
            + e.getMessage());
      }
    }
  }
}
Результаты на моей машине (ТТХ те же):
Код: plaintext
1.
2.
3.
Запись данных за 8 с. 514 мс.
Сумма = 4500001500000
Чтение данных за 2 с. 312 мс.
Завершение сессии.

PS: Вы можете дополнительно поэкспериментировать с транзакциями.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37001891
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitДействительно, не интересны. А если не то и не другое?

Судя по ссылке, это как раз скорость пакетной загрузки, да еще без транзакций, без проверки целостности, без индексации. Что, как раз, не интересно, тут скорость вообще от БД не зависит, только от скорости заливки данных на диск :)

Если у нас есть транзакция и БД живет не только в памяти, то все равно на одну запись уйдет один seek. Ну и считайте, сколько записей получим при времени seek в 4ms, например....

Выигрыш можно получить, если делать как в некоторых noSQL базах - на диск писать потоком список операций, а после краха накатывать его снова. Но это работает только если вся БД помещается в памяти и допустимо долгое восстановление. Ну и при этом есть и прочие проблемы.
Cache так не делает, это точно :)

В общем, обогнать физику как-то не получается :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37003378
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Судя по ссылке, это как раз скорость пакетной загрузки
Вам, наверное, не составит труда в подтверждение Ваших слов привести ссылку на документацию , а также раскрыть размер этих пакетов?
DPH3...да еще без транзакций...
Наличие 3000000 операций в одной транзакций не сильно замедляет скорость чтения/вставки. К тому же я предложил проверить лично работу с транзакциями и без них.
DPH3...без проверки целостности...
О какой проверке целостности может идти речь при работе с парой "ключ(и)/значение" (в терминах Caché - разрежённый массив или глобал)?
DPH3...без индексации...
Вы не заметили двух индексов: первый - строковый, второй - числовой ?
DPH3...В общем, обогнать физику как-то не получается :)
Кто-то поставил это под сомнение?
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008625
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Выигрыш можно получить, если делать как в некоторых noSQL базах - на диск писать потоком список операций
Вы не поверите! Но в каше очень хорошо видно, как SQL распадается на микрооперации, и эти микрооперации пишутся потоком в журнал. И эти микрооперации как раз можно проводить самостоятельно.

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

80000/с это не скорость записи в базу. Это скорость передачи с внешним приложениям.
Если я не ошибаюсь, это именно была скорость единичного обмена.
Внутренняя скорость чтения и записи зависит от скорости диска, тут все гораздо проще.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008633
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

короче. Если я в середине вашего теста выдерну UPS и сетевое питание - запишется ничего, часть или база будет в corrupted состоянии и самостоятельно уже не поднимется?
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008636
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как вам на примере показать...

Есть бейсик для 1С. Где вроде как и есть какие-то объекты и какие-то операции, но на самом деле непонятно, как оно все это делает и почему тормозит. Теоретически, конечно, оно может работать и оптимально, а на практике не очень, и никакая физика не помогает

И есть объектно-ориентированный ассемблер (типа С++), и предположим, что он имеет альтернативные объекты и объекты.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008722
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymБлок А.Н.,

короче. Если я в середине вашего теста выдерну UPS и сетевое питание - запишется ничего, часть или ...
Запишется ничего, если эти операции в рамках одной общей транзакции. После перезапуска системы Caché откатит незавершённые транзакции.
Запишется часть, если это автономные операции вне рамок общей транзакции. Учитывая, что все операции атомарны, при записи объекта (или, если угодно, таблицы), состоящего из 10 полей, запишутся все 10 полей или ни одно.

an0nym... или база будет в corrupted состоянии и самостоятельно уже не поднимется?
База данных не будет в противоречивом состоянии, поскольку в Caché предусмотрены соответствующие технологии и механизмы :
Caché Data Integrity Guide

Caché High Availability Guide
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008852
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,

я спрашиваю конкретно про вышеприведенные 80000/сек.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37008941
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymservit,

я спрашиваю конкретно про вышеприведенные 80000/сек.
Я привёл примеры двух тестов: с использованием "Caché eXTreme dynamic objects" и "Multidimensional Data Storage API".
Ответ касался обоих.

PS: Вы, наверное, обратили внимание на закомментированные строчки кода в первом примере (без общей транзакции):
Код: plaintext
1.
2.
3.
4.
5.
...
//dbConn.startTransaction();
...
//dbConn.commit();
...
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37009253
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymБлок А.Н.,

короче. Если я в середине вашего теста выдерну UPS и сетевое питание - запишется ничего, часть или база будет в corrupted состоянии и самостоятельно уже не поднимется?

В журнал пишутся атомарные операции(в основном, set и kill), а не операции с объектами или sql.
1.Журнала два, операционный и постоянный, в базу данные записываются данные после записи в операционный журнал. В какой момент данные записываются в постоянный журнал - я не в курсе.
2.В журнале есть номер процесса и состояние транзакции, при неожиданном падении процесса (например, его закрыла операционная система) через короткое время каше детектирует ситуацию, проверяет журнал и при необходимости отменяет результат операций.
3.Запись строки таблицы - это один атом операции, т.е. обновить половину полей даже при сбое у вас не получится. Удаление/установка индекса это другая операция, отдельно установка и отдельно удаление.

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

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

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

Для примера По области начались ураганы... Но это не останавливает нашу клиентуру. Свет рубили и не раз! Но они снова и снова запускали Каше - упал сам сервер, целостность баз данных не нарушена.

Также, в каше есть горячие бэкапы и shadow/mirror.
Т.е. надежность не является проблемой каше.

-------
Приведенный пример с 80000 операций/с это, если не ошибаюсь, пилотный проект электронной биржи, либо чего связанного с биржей. Насколько я понял, транзакции конкретно в этом месте не использовались. Ну если у биржи кто-то выдернет UPS-ник, то я даже не знаю :-)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37014395
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Приведенный пример с 80000 операций/с это, если не ошибаюсь, пилотный проект электронной биржи, либо чего связанного с биржей. Насколько я понял, транзакции конкретно в этом месте не использовались. Ну если у биржи кто-то выдернет UPS-ник, то я даже не знаю :-)

Ну и зачем тогда сравнивать скорость bulk insert c скоростью атомарной записи в SQL-базах?
Я же и говорил, что 80000 в секунду - это без транзакций, скорее всего с write cache и без гарантий сохранности или хотя бы понимания, а что сохранилось при сбое железа.

На биржах, надеюсь, в реальности такое все-таки не используют :)
А писать данные в БД со скоростью потоковой записи на диск можно в почти любой реляционке. Только обычно не нужно :)
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37015337
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3На биржах, надеюсь, в реальности такое все-таки не используют :)Используют:
Технологии InterSystems для Extreme Transaction Processing (стр. 22-24)

TD Ameritrade
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37016572
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitИспользуют:

Ну, тут-то прямо говорится о поддержке транзакций, так что все нормально. Хотя, конечно, в основном маркетинговый bullshit.
Ну и нагрузки смешные, 250 000 операций в день - и зачем там нужно масштабирование?
А уж то, что необходима поддержка специалистов вендора для импорта данных по какому-то миллиону новых абонентов - звучит крайне странно.
...
Рейтинг: 0 / 0
Помогити с нереляционными(встраиваемыми) СУБД
    #37016862
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Ну и зачем тогда сравнивать скорость bulk insert c скоростью атомарной записи в SQL-базах?
Вы опять не поняли. Это совсем не скорость записей в базу. Это скорость записи данных из внешнего приложения. И я узнал об этом примере именно как о демонстрации тесноты интеграции каше и java, а не как о примере скорости каше.

Проект реальный, и замена другой реально работающей системе, которая "не шмагла". На чем уж она там была написана, а не в курсе.

DPH3Ну и нагрузки смешные, 250 000 операций в день - и зачем там нужно масштабирование?
А уж то, что необходима поддержка специалистов вендора для импорта данных по какому-то миллиону новых абонентов - звучит крайне странно. А теперь я не понял, вы о чем?
250000 в день это не то чтобы смешные нагрузки - запросы бывают разные, но как демонстрация скорости не канает, согласен. Я правда не понял, откуда эта цифра.

По поводу специалистов вендора я опять же не понял, о чем вы? Мне известно только о поддержке специалистов вендора при разработке новой системы и миграции старой системы в новую.
Но при чем тут количество абонентов?

Вообще меня в этой дискуссии раздражает роль суррогата маркетинговой службы ИС.
Несколько лет назад на нас косились "хаха-смотрите, придурки без SQL работают, ну и дикари" (хотя SQL в каше есть).
Так и сейчас приходится доказывать, что не верблюд.
Говоришь, что каше есть и у нее есть какие-то возможности и какие-то преимущества - смотрят, как будто прибыл с марса и рассказываю про марсианские яблони. Ну честное слово :-)
Все, что маркентинговая служба несет в массы воспринимается на уровне рекламы виагры.
Но мы есть, мы настоящие. И мы не виагра :-)
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Помогити с нереляционными(встраиваемыми) СУБД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]