- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Ну (раз уж id известные и просто числовые) тогда сделайте не один файл, а (например) 1000. По принципу в первом с id от 0 до 1000, во втором от 1001 до 2000 и т.п. Ну и обращаться к нужному в зависимости от диапазона.
И вот мы начали создавать собственный unordered_map/hashtable :)
чем вас sqlite с индексом не устроил не понятно, уже бы запустили и всё работало. Если надо просто поместите бд файл в память и всё будет работать еще быстрее.
B-Tree и при этом хранить в памяти?
Тогда уж redis.
B-Tree и при этом хранить в памяти?
Тогда уж redis.
Если площадка позволяет, я не против. Применять технологии именно так как требуется.
подсказываю:
- во-первых хранить идентификаторы неразумно, тк придётся лазить по всему объёму данных
- чтобы не лазить по всему объёму данных надо сделать фиксированный размер записей, аналог char в mysql
- номером (идентификатором) записи будет просто номер записи в вашем бинарнике, если такого идентификатора не существует, просто заполняйте фиксированный объём нулл байтами
Итого:
имеем массив вида
1 - сортируем по возрастанию по ключам 5,12,14 (ksort)2 - определяем минимальное и максимальное значение ключей массива, в нашем случае $min = 5, $max=14, а также максимальную длину имени в байтах (по strlen), в нашем случае максимальная длина имени у Sergio, равна $maxnamelen = 6
3 - формируем датафайл:
4 - при поиске, по датафайлу, определяем размер датафайла в байтах (filesize), читаем последний байт, определяем максимальную длину имени в байтах, определяем, количество блоков, деля размер датафайла на максимальную длину имени в байтах и читаем файл с нужного места, умножая $id на максимальную длину имени в байтах (идентификатор - это номер записи в датафайле)
ps: собственно поиска то и никакого не будет, вы будете просто дважды читать датафайл - первый раз, чтобы выгрести максимальную длину имени в байтах, а второй, чтобы прочитать само имя с нужного места датафайла (fseek, fread), быстрее некуда
хорошая идея. взял на заметку.
fwrite($f, pack('a'. $maxnamelen , $data[$i] )); а вот эта штуковина не раздует слишком файл?
если например имя одно 3 символа. а другое 32. то он забьет чем эти пространства? дополнит 3 до 32 чем?
надо попробовать
хорошая идея. взял на заметку.
fwrite($f, pack('a'. $maxnamelen , $data[$i] )); а вот эта штуковина не раздует слишком файл?
если например имя одно 3 символа. а другое 32. то он забьет чем эти пространства? дополнит 3 до 32 чем?
надо попробовать
дополнит нулл байтами, раздует, но итоговая база вряд ли будет какой-то очень большой, как другой рабочий вариант, если боитесь, что не хватит места на хостинге - подготовьте два датафайла:
- один из них будет индексом, в нём будут идешниками номера записей, а значениями, с какого по какой байт во втором датафайле находится содержимое
- второй - собственно содержимое, подряд, можно даже не паковать его, а просто подряд записывать
так более оптимально, можно записывать не с какого по какой байт, а с какого байта и длину (C - до 256):
а чтобы прочитать потом по идешнику $id, умножаем $id на 5 (N 4 байта + C 1 байт), читаем индекс с нужного места, 5 байт, определяем с какого байта надо читать датафайл и длину и читаем
ps: при использовании N - максимальный размер датафайла с данными, около 4 гигов