• Как реализовать приложение, которое работает с удаленной базой данных?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Любое облако посмотрите
    Ответ написан
    Комментировать
  • Как правильно хранить данные парсинга на сайте?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    5000 * 5000 = 25 000 000

    раз в день обновляем все ссылки
    25 000 000 * 365 = 9 125 000 000 000 в год

    Да, для одной таблицы это пожалуй многовато
    Рекомендую поступить так
    хранить данные в двух таблицах
    в первой 25 000 000
    во второй (архивной) все записи которые были раньше - до обновления
    то есть вся история изменений у Вас будет во второй таблице
    Соответственно секционировать архивную таблицу примерно по 2 недели

    Таким образом Вы добьетесь что актуальные данные будут доставаться быстро
    Архивные подольше - но это и понятно

    Потом данные за прошлые периоды можно бэкапить оставляя только последние записи изменений (например хранить в архиве только данные за полгода)

    В случае необходимости - всё можно достать и посчитать,
    но практика говорит что такие бешеные объемы если и доставать то они считаться будут очень долго, а ввиду давности времени зачастую бывают неактуальны. По прошлогодним ссылкам явно никто аналитику проводить не будет.
    Ответ написан
  • Как правильно построить архитектуру таблиц в моем случае? Как не плодить таблицы?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Группы храните в формате XML в отдельной таблице
    а в строку где необходимо указать некий набор (Группу) передавайте ID Группы
    Ответ написан
    Комментировать
  • Что делать если одновременно пойдут запросы на последний продукт?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    А в чем проблема ?

    Ну пойдут запросы и ладно ...
    вроде так и должно быть
    Ответ написан
    Комментировать
  • Запрос на выборку данных из нескольких таблиц?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    логично что не выводит
    у Вас нет пересекающихся наборов в условиях

    Where
    "Один уникальный набор"
    And
    "Второй уникальный набор"
    Ответ написан
    Комментировать
  • Какие Вы знаете программы для переноса данных из одной бд в другую?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    1. ETL (Интегрейшен сервис) <-- выполняет все Ваши условия
    2. Запросы к прилинкованному серверу

    Еще варианты полного переноса данных на другой сервер:
    3. Репликации таблиц
    4. ОлвейсОн базы данных (MS SQL)
    5. Лог шипинг (MS SQL - повторение транзакций на другом сервере)
    Ответ написан
    Комментировать
  • Есть ли смысл хранить байт в поле varchar(max) в данном случае?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Как резервируется память в поле varchar(max)?

    - varchar Ничего не резервирует - занимает столько место сколько надо для хранения данных
    резервирует другой тип данных - char

    Собственно говоря это одно из основных отличий этих типов данных
    Ответ написан
    Комментировать
  • Стоит ли разнести данные в БД: на пользователя своя схема?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    1. Тяжело ли работать с такой структурой БД?
    - Да это будет геморрой, особенно в части замусоривание базы разными таблицами
    но эксплуатировать легче (каждый пользователь видит только свои данные и с ними сам работает)

    2. Легко ли в дальнейшем осуществлять миграции структуры данных по всем схемам
    - Если встанет вопрос миграции структуры, то это решение может прибавить проблем при данной операции

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

    4. Может быть вы что-то предложите?
    - Мне нравится вариант предложенный Sumor
    Если хотите поиграться схемами, то лучше использовать не таблицы, а представления. На каждого пользователя создать представления в своей схеме с отбором только его записей и выставлением прав.

    Вообще то так майкрософтом и рекомендуется поступать
    Ответ написан
    Комментировать
  • Как реализовать умное сравнение строк?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Все выше написавшие без образования :)
    Сорри ребята :)

    Если мы говорим про MS SQL
    то в Integration Services имеется Fussy Group и Fussy LookUP

    Там сравнение идет по 7 алгоритмам (расстояние между буквами, сколько символов надо заменить, расстояние между символами на клавиатуре и тд)

    Вот видео для тех кому лень гуглить
    https://www.techdays.ru/videos/1378.html

    в оракле тоже такое есть (по моему называется Дата директор)
    Ответ написан
  • Как извлекать данные группами с поиском по строкам групп?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Select distinct group_id
    from MyTable
    where data = 'data132'
    Ответ написан
    Комментировать
  • Как у пользователя SQL убрать права на остановку/перезагрузку MS SQL Server?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    уберите у него право на
    Alter Server State
    Ответ написан
  • Sql просуммировать значения в 100 колонках?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    поддерживаю что структура БД немыслимая

    но я бы сделал вычисляемый столбец с сохраненным значением
    Ответ написан
    Комментировать
  • Какие есть хранилища для логов и статистики?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    а у меня сейчас на работе такая же фигня ....
    давайте будем применять NO SQL .... и началось....

    Ну запишешь ты 10 миллионов строк в секунду
    как ты их потом обрабатывать будешь?
    Яровая стайл?

    выход простой - писать в маленькие секционированные таблицы в которых (маленькие по времени - например данные хранить в них не более 2 недель, есть варианты где и по суткам секционированно)
    потом переключать эти таблицы в хранилище - там хранить месяца 2-3 (примерно)
    когда уже обработка вся закончилась (данные стали редко востребованными) перекидывать в долгосрочное хранение при этом грохать все индексы, включать компрессию страниц и хранить уже полгода (желательно в другой БД)
    потом эту Архивную БД бэкапить и убирать с сервера

    И правильно сказали выше
    чем больше индексов тем больше тормозят операции вставки и апдейты

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

    Не переживайте - и Монго Вы тоже можете забить инсертами, а уж Апдейты там вообщето уязвимое место (данные копируются сразу в несколько таблиц - денормализация, и что бы апдейтануть одну запись она будет искаться везде где она есть .... надеюсь понятно объяснил. А искаться блин JSONом! ) :)
    Ответ написан
    1 комментарий
  • Как сделать INSERT OR UPDATE?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    в MS SQL
    Merge

    в My SQL
    Insert into .... with duplicate key Update

    попробуйте оба варианта :)
    точно незнаю какой сработает в SQL Lite
    Ответ написан
    Комментировать
  • ORDER с GROUP BY в прикрепленной таблице?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Select ... over (partition by ... ORDER BY ...)
    from ..
    Ответ написан
    Комментировать
  • Возможно ли в одном запросе сделать SELECT и INSERT?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    в MS SQL есть Output
    возвращает заинсерченные строки в том числе присвоенные айдишники и гуиды ;)
    Ответ написан
    Комментировать
  • Какой онлайн сервис использовать для построения схемы бд?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    visio из офиса 365 :)
    совместное редактирование в обалаке :)
    Ответ написан
    Комментировать
  • Как реализовать множество разнотипных свойств у элемента?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    XML
    JSON
    Ответ написан
    Комментировать
  • Как выбрать "товары" содержащие одновременно несколько "параметров"?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Примерно так (с точки зрения оптимизации стоит еще подумать но принцип рабочий)
    -- Создаем таблицы
    -- Таблица товаров
    Create table article (
    id_article int identity(1,1),
    Name_article NVarchar(20))
    
    -- Таблица парметров 
    Create table article_param (
    id_param int identity(1,1),
    Name_param Nvarchar (100))
    
    -- Таблица соотношения
    CREATE TABLE dbo.article_param_item
    (
      id int identity(1,1),
       id_article  int not NULL,
       id_param  int not NULL
    )
    
    
     truncate table article
     truncate table article_param
     truncate table article_param_item
    
    
    -- Заполняем таблицы данным для примера
    INSERT INTO [dbo].[article] (Name_article) VALUES (N'Утюг')
    INSERT INTO [dbo].[article] (Name_article) VALUES (N'Стол')
    INSERT INTO [dbo].[article] (Name_article) VALUES (N'Телевизор')
    
    INSERT INTO [dbo].[article_param](Name_param)VALUES (N'Пластиковый')
    INSERT INTO [dbo].[article_param](Name_param)VALUES (N'Плоский')
    INSERT INTO [dbo].[article_param](Name_param)VALUES (N'Красный')
    INSERT INTO [dbo].[article_param](Name_param)VALUES (N'Бракованный')
    INSERT INTO [dbo].[article_param](Name_param)VALUES (N'Новый')
    
    -- Заполняем таблицу соотношений
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(1,1) -- Утюг Пластиковый
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(1,5) -- Утюг Новый
    
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(2,1) -- Стол Пластиковый
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(2,2) -- Стол Плоский
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(2,3) -- Стол Бракованный
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(2,4) -- Стол Красный
    
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(3,2) -- Телевизор Плоский
    INSERT INTO [dbo].[article_param_item]([id_article],[id_param])VALUES(3,5) -- Телевизор Новый
    
    
    -- Отображаем все товары с их параметрами
    SELECT *
      FROM [dbo].[article] art 
      join [article_param_item] rel on art.id_article=rel.id_article
      join [article_param] parametr on parametr.id_param =rel.id_param
    
    -- Для поиска по нескольким параметрам поиска необходимо занести их во временную таблицу
    Create table ##Param_table (id_parm int)
    
    -- Допустим ищем товары удовлетворяющие двум параметрам
    -- Плоский и Новый
    insert into  ##Param_table (id_parm) values (2)
    insert into  ##Param_table (id_parm) values (5)
    
    -- Находим все товары удовлетворяющие нашему списку параметров
    
    ;with CTE_ArticleInParam as
    (
    SELECT art.[Name_article],parametr.Name_param
    ,count (parametr.Name_param) over (partition by art.[Name_article]) as 'Count_Param'
    FROM [dbo].[article] art 
    join [article_param_item] rel on art.id_article=rel.id_article 
    join [article_param] parametr on parametr.id_param =rel.id_param 
    join ##Param_table ParTabl on ParTabl.id_parm = rel.id_param 
    )
    
    select [Name_article],Name_param,Count_Param
    from CTE_ArticleInParam
    where Count_Param = (select count (*) from ##Param_table)
    Ответ написан
    Комментировать
  • На какой улице (`Street`) больше домов?

    igruschkafox
    @igruschkafox
    Специалист по сопровождению БД MS SQL
    Select Count(id) , Street
    from Mytable
    group by Street
    Ответ написан
    9 комментариев