Сорри если не совсем по теме
Oct. 26th, 2005 10:40 amИмеется CGI скрипт написаный на C, который зачитывает в память некую базу данных, после чего отвечает на queries юзера, делая поиск по базе.
Проблема: база достаточно большая и приходится зачитывать ее в память при каждом query, что занимает 10-20 секунд.
Вопрос: можно ли как-то хранить базу в памяти между сессиями? (Кажется можно попробовать запускать процесс, читающий базу, отдельно и держать его в памяти. Но это решение будет привязано к конкретной ОС и нет ли чего-нибудь по-проще? Перегонять всю базу к клиенту не подходит.)
Проблема: база достаточно большая и приходится зачитывать ее в память при каждом query, что занимает 10-20 секунд.
Вопрос: можно ли как-то хранить базу в памяти между сессиями? (Кажется можно попробовать запускать процесс, читающий базу, отдельно и держать его в памяти. Но это решение будет привязано к конкретной ОС и нет ли чего-нибудь по-проще? Перегонять всю базу к клиенту не подходит.)
no subject
Date: 2005-10-26 09:28 am (UTC)С дÑÑгой ÑÑоÑонÑ, на Ð¼Ð½Ð¾Ð³Ð¸Ñ web-Ñ Ð¾ÑÑÐ¸Ð½Ð³Ð°Ñ Ð¿ÑедоÑÑавлÑÑÑÑÑ "ÑÑандаÑÑнÑе" долгоживÑÑие пÑоÑеÑÑÑ, SQL-ÑеÑвеÑа назÑваÑÑÑÑ (обÑÑно mySQL или MS-SQL). Так ÑÑо еÑли пеÑепиÑаÑÑ ÑÑо дело под иÑполÑзование SQL-Ð±Ð°Ð·Ñ (ÑÑÑ, пÑавда, головой подÑмаÑÑ Ð¿ÑидеÑÑÑ), ÑÑебÑемÑй ÑÑÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð´Ð¾ÑÑигнÑÑ.
Ðаиболее ÑазÑмнÑм ваÑианÑом кажеÑÑÑ Ð¾ÑказаÑÑÑÑ Ð¾Ñ ÐÐЧÐТЫÐÐÐÐЯ Ð±Ð°Ð·Ñ Ð² памÑÑÑ, и Ñ ÑаниÑÑ ÐµÑ Ð½Ð° диÑке в виде, облегÑаÑÑем бÑÑÑÑÑй поиÑк. ÐаÑианÑÑ Ð·Ð´ÐµÑÑ ÑледÑÑÑие:
1. Ð¥Ñаним Ð±Ð°Ð·Ñ Ð² Ñайле пÑимеÑно в Ñом виде, в каком она полÑÑаеÑÑÑ Ð² памÑÑи поÑле заÑиÑÑваниÑ, ÑолÑко вмеÑÑо ÑказаÑелей иÑполÑзÑем ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð½Ð°Ñала Ñайла. ÐÑи запÑÑке ÑкÑипÑа делаем mmap (или его аналог в Win32) и оÑобÑажаем Ñайл в адÑеÑное пÑоÑÑÑанÑÑво пÑоÑеÑÑа. ФоÑÐ¼Ð°Ñ Ð±Ð°Ð·Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ ÑиÑÑемно завиÑимÑй, Ñ.е. пÑогÑÐ°Ð¼Ð¼Ñ Ð·Ð°ÑиÑÑÐ²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ñ Ð¸Ð· нÑнеÑнего ÑоÑмаÑа и ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð² ÑÑÐ¾Ñ Ð²ÑÑ Ñавно нÑжно имеÑÑ. ÐаÑо не нÑжно пеÑеделÑваÑÑ Ð°Ð»Ð³Ð¾ÑиÑÐ¼Ñ Ð¿Ð¾Ð¸Ñка. ÐдинÑÑвенное ÑÑо пÑидеÑÑÑ Ð¿ÐµÑед вÑеми обÑаÑениÑми по ÑказаÑÐµÐ»Ñ Ð¿ÑибавлÑÑÑ ÑмеÑение, Ñ ÑанÑÑееÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑей ÑÑÑÑкÑÑÑе к ÑказаÑÐµÐ»Ñ Ð½Ð° наÑало оÑобÑаженного Ñайла.
2. ÐÑполÑзÑем persistent hash (dbm, Berkeley DB и ваÑиаÑии) или B-деÑевÑÑ (Berkeley DB)
3. ÐÑполÑзÑем in-process SQL (http://www.sqlite.org). ÐÑо ÑÑавнимо по ÑÑÑдозаÑÑаÑам Ñ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¾Ð¼ на иÑполÑзование SQL-ÑеÑвеÑа, но заÑо Ð¼Ñ Ð½Ðµ ÑвÑÐ·Ð°Ð½Ñ Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑÑ Ð¸ÑкаÑÑ Ñ Ð¾ÑÑинг Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаемÑм диалекÑом SQL - Ñвой Ð´Ð¸Ð°Ð»ÐµÐºÑ SQL Ð¼Ñ Ñ Ñобой ÑаÑкаем.
no subject
Date: 2005-10-26 07:25 pm (UTC)