Шрифт
Большое количество данных и мало ресурсов
Play

Большое количество данных и мало ресурсов

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

10, у категории только имя. Что нужно делать с этой структурой данных: найти все элементы данных категорий, найти элементы по значению поля.

Сейчас это сделано на python+sqlite, но скорости явно не достаточно(должно работать всё на слабой платформе). Так вот посоветуйте , пожалуйста,с помощью чего рациональнее всего решить данную задачу.

Re: Большое количество данных и мало ресурсов

1. заменить python на С

2. Если скорости всё ещё недостаточно, то когда утресётся структура базы, sqlite заменяется на db4, муторно конечно, зато если сделать аккуратно будет работать как из пулемёта.

p.s. "должно работать на слабой платформе" и модный интерпретатор - вещи несовместимые :)

Re: Большое количество данных и мало ресурсов

>p.s. "должно работать на слабой платформе" и модный интерпретатор - вещи несовместимые :)

Переписал на с++ и qt4 - работа с БД это просто писец:((((( Проход по 100.000 записям занимает 3 секунды на не самой слабой системе. Проблема скорее всего в sqlite, тк доступ к элементу последовательный(sqlite3_step).

Re: Большое количество данных и мало ресурсов

> Проход по 100.000 записям занимает..

покажите-ка структуру БД, а то странные какие-то проходы :) и расскажите как вы с ней работаете - а то создаётся впечатление, что запросами которые выдёргивают/затрагивают чуть не всю базу..

Re: Большое количество данных и мало ресурсов

queryString="SELECT id,name,parentId FROM Item"; if(query.exec(queryString)==false) < qDebug()<<"db error"<< query.lastError ().driverText() << query.lastError ().databaseText () << queryString; > while (query.next()) < temp.setType(MBItem::Song); temp.setName(query.value(1).toString()); temp.setId(query.value(0).toInt()); temp.setParent(query.value(6).toInt()); all_items.insert(temp.getId(),temp); >

Размер таблицы Item порядка сотни тысяч, время выполнения этого кода

Re: Большое количество данных и мало ресурсов

> когда утресётся структура базы, sqlite заменяется на db4

а что, в db4 sql появился?

Re: Большое количество данных и мало ресурсов

db4, насколько я понял, просто хранит данные, но не управляет ими. То есть СУБД надо самому делать

Re: Большое количество данных и мало ресурсов

Re: Большое количество данных и мало ресурсов

Если нужно показать всё содержимое базы? На каждое событие скролла генерировать запрос к базе?

Re: Большое количество данных и мало ресурсов

если делать по вашему, то если запись в среднем 64 байта, а всего их 200000 то придётся в память пихать где-то мегов 12-15, что уже противоречит требованию "малых ресурсов".. плюс к этому ГУЙ со скроллом..

а потом, ну кому надо листать 200000 строк ? да не в жизть ни кому.. полная выборка может быть полезна только очень продвинутому пользователю, который будет автоматически, своими средствами её обрабатывать.

сортируйте по алфавиту и делайте выборки по первому символу, или по какому-нить другому признаку. У вас же есть категории ? вот по ним и выбирайте.

Re: Большое количество данных и мало ресурсов

Вот уже думаю так делать: вибирать по немного из БД для показа. Щас посмотрю, сколько времени займёт запрос, если приемлемое время, то так и оставлю.

Re: Большое количество данных и мало ресурсов

1. Ты бы ещё более глупый совет дал, было бы совсем смешно. Но так тоже ничё, я поржал.

2. Заменить на PostgreSQL. Он оптимиздит запросы гораздо умнее чем SQLite.

P.S. Глупости глаголишь. Интерпретатор тут ни разу не слабое звено. Даже если в 1000 раз быстрее работать будет, разница на глаз не должна быть заметна.

P.P.S. В каком заведении готовят таких "программистов", как ты, гр. Кузнецов? Чисто чтоб знать, с кем ни при каких обстоятельствах нельзя связываться.

Re: Большое количество данных и мало ресурсов

Есть хороший способ представления дерева в БД: использовать текстовое поле для сортировки. Тогда любая ветка дерева извлекается одним запросом, типа sort > "AAAAABCD" and sort < "AAAAAC".

Как отсортировать существующее дерево, и как сделать быструю вставку и удаление элементов и веток - сам догадаешься, если ты хотя бы немного умнее отметившегося тут Кузнецова.

Re: Большое количество данных и мало ресурсов

Спасибо за совет:) Postgres конечно хорошо, но это пушкой по воробьям:)

Re: Большое количество данных и мало ресурсов

мож тебе надо твоё дерево отобразить на файловую систему, а элементы на файлы??

принадлежность елемента к разным категориям реализовать симлинками??

Re: Большое количество данных и мало ресурсов

То есть, корень - это A, потомки - AA,AB,AC и тд,потомки их потомков AAA, AAB,ABA и тд? Я правильно понял?

Re: Большое количество данных и мало ресурсов

>мож тебе надо твоё дерево отобразить на файловую систему, а элементы >на файлы?? >принадлежность елемента к разным категориям реализовать симлинками??

И какая ФС выдкржит ТАКОЕ издевательво? Помню в бытность моей работы на хостинге, один герой так сделал, у него было порядка миллиона файлов, в каждой папке примерно 5 файлов по 100 байт. Он ещё удивлялся, почему тормозит:)) ФС была UFS на FreeBsd5.3

Re: Большое количество данных и мало ресурсов

Заодно, может есть у кого в цифровом виде SQL for Smarties J. Celco? Там вроде по этой теме много написано.

Re: Большое количество данных и мало ресурсов

> Postgres конечно хорошо, но это пушкой по воробьям:)

Тебе шашечки или ехать?

SQLite так быстро работать не будет на твоих запросах.

Re: Большое количество данных и мало ресурсов

Примерно так. Только надо ещё оставлять место для вставки новых элементов.

Re: Большое количество данных и мало ресурсов

>И какая ФС выдкржит ТАКОЕ издевательво?

нормальная. Это не издевательство, если ось не win и fs не ntfs или рейзер. я предполагал ext2 под линукс.

а почему тормозил UFS на FreeBsd5.3 спроси в толках, там расскажут, хотя мож у него ещё и руки кривые были

📎📎📎📎📎📎📎📎📎📎