Список, разделитель, файлы

danni

Client
Регистрация
01.07.2012
Сообщения
373
Благодарностей
6
Баллы
18
Привет всем! Не могу разобраться с простым вопросом, что-то мозг уже не варит сегодня)
У меня есть: 3 файла на хдд, где я храню ссылки на создаваемые страницы(доры на блогах\профиля), 100-200к строк(потом чищу и заново), примерно в таком формате:
Код:
[url=ссылка]анкор[/url]
так же на html и еще 1 спец.вид аналогичный.
У меня идет запись в эти файлы обычно потоков в 200, с весьма быстрой скорость, т.к. все делаю через гет\пост, так что я хочу перенести на ссд(сделал бы давно, но мне некоторые говорили, что разницы не будет, а похоже будет). Так же эти ссылки постятся в разные места иногда параллельно с добавлением, идет перелинковка(создать подсписок рандом-50 значений). Короче говоря мне кажется это все можно немного оптимизировать.
Требуется: Создать 1 файл, но возникают вопросы:
1) В каком именно виде хранить ссылки и анкоры оптимальнее(бб-код, хтмл или вообще через пару знаков разделителя)
2) Когда я создаю подсписки с 50 записями например, как мне привести формат в нужный? Если просто через замену(1 шаг - заменить <a href на [url и т.д.) не будет ли больше нагрузка и медленней выполнение. Если через разделитель, то как - я там толком ничего не придумал.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 562
Благодарностей
9 177
Баллы
113
Привет всем! Не могу разобраться с простым вопросом, что-то мозг уже не варит сегодня)
У меня есть: 3 файла на хдд, где я храню ссылки на создаваемые страницы(доры на блогах\профиля), 100-200к строк(потом чищу и заново), примерно в таком формате:
Код:
[url=ссылка]анкор[/url]
так же на html и еще 1 спец.вид аналогичный.
У меня идет запись в эти файлы обычно потоков в 200, с весьма быстрой скорость, т.к. все делаю через гет\пост, так что я хочу перенести на ссд(сделал бы давно, но мне некоторые говорили, что разницы не будет, а похоже будет). Так же эти ссылки постятся в разные места иногда параллельно с добавлением, идет перелинковка(создать подсписок рандом-50 значений). Короче говоря мне кажется это все можно немного оптимизировать.
Требуется: Создать 1 файл, но возникают вопросы:
1) В каком именно виде хранить ссылки и анкоры оптимальнее(бб-код, хтмл или вообще через пару знаков разделителя)
2) Когда я создаю подсписки с 50 записями например, как мне привести формат в нужный? Если просто через замену(1 шаг - заменить <a href на [url и т.д.) не будет ли больше нагрузка и медленней выполнение. Если через разделитель, то как - я там толком ничего не придумал.
можно через разделитель, напрмиер через ###
правда с подсписком для перелинковки просто так не получится, будет геморойнее..
 

danni

Client
Регистрация
01.07.2012
Сообщения
373
Благодарностей
6
Баллы
18
Да я вот гуглю, думаю может через шарп сделать. Правда вот не знаю, через цикл брать 50 строк и как-то их оборачивать в хтмл или бб-код не будет ли медленнее, чем без этого)
И кстати да, важный вопрос - отразиться ли это на скорости(не 3 файла, а 1), т.к. если незначительно, но зачем парить мозг себе и другим =)
Файлы 100-200к строк 20-30мб.
П.с. Или брать 50 строк в переменную по обычному и через шарп делать замену.... Главная моя проблема в том, что я не особо представляю, как это все повлияет на скорость, поэтому и куча вариантов, многие из которых просто забьют проц под 100% и ничего не сделают полезно)
 

danni

Client
Регистрация
01.07.2012
Сообщения
373
Благодарностей
6
Баллы
18
Вот нашел код, сам не разбираюсь на таком уровне, чтобы вставить рег.выражение)
Код:
var list = project.Lists["Список 1"]; // Исходный список
            Random rand = new Random();
            StringBuilder strb = new StringBuilder();
                // j - количество строк, которое нужно взять.
            int j = int.Parse(project.Variables["j"].Value);
            for (int i = 0; i < j; i++)
            {
                int r = rand.Next(list.Count);
                if (i + 1 == j)
                {
                    strb.Append(list[r]);
                }
                else
                {
                    strb.Append(list[r] + "\r\n"); // Разделитель
                }
                list.RemoveAt(r);
            }
            return strb.ToString();
Допустим я буду хранить текст так: ссылка(1)анкор, как мне в этом коде вставить регулярку, чтоб в итоге было 2 переменные.
Вопрос об эффективности этого метода по сравнению с обычной заменой через средства зенки все еще акутален.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 562
Благодарностей
9 177
Баллы
113
Да я вот гуглю, думаю может через шарп сделать. Правда вот не знаю, через цикл брать 50 строк и как-то их оборачивать в хтмл или бб-код не будет ли медленнее, чем без этого)
И кстати да, важный вопрос - отразиться ли это на скорости(не 3 файла, а 1), т.к. если незначительно, но зачем парить мозг себе и другим =)
Файлы 100-200к строк 20-30мб.
П.с. Или брать 50 строк в переменную по обычному и через шарп делать замену.... Главная моя проблема в том, что я не особо представляю, как это все повлияет на скорость, поэтому и куча вариантов, многие из которых просто забьют проц под 100% и ничего не сделают полезно)
если файлы такие внушительные, то конечно стоит озаботиться тем, чтобы работать с 1 файлом, вместо 2-3..
выигрыш в загрузке процессора и памяти будет ощутимый, я считаю..
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Не думаю что 3 фаила по 40 мегабайт в состоянии серьезно загрузить проц или оперативку, тем более такими операциями
Да и с фаилами ведется работа из оперативной памяти, где иногда сбрасываются буферы на диск, так что от ССД заметного прироста тоже не ожидаю
Что касается формата - я бы хранил данные а не шаблоны ( ну только если шаблон не данные), т.е. что то вроде
"url";"ancor";"somethingelse"
А уже их бы подставлял в нужные строки
 

danni

Client
Регистрация
01.07.2012
Сообщения
373
Благодарностей
6
Баллы
18
Не думаю что 3 фаила по 40 мегабайт в состоянии серьезно загрузить проц или оперативку, тем более такими операциями
Да и с фаилами ведется работа из оперативной памяти, где иногда сбрасываются буферы на диск, так что от ССД заметного прироста тоже не ожидаю
Что касается формата - я бы хранил данные а не шаблоны ( ну только если шаблон не данные), т.е. что то вроде
"url";"ancor";"somethingelse"
А уже их бы подставлял в нужные строки
Так как их подставлять? Вот возьму я рандом-50 строк в виде "url";"ancor" и как мне вокруг них добавить <a href и т.д., кроме как заменой из 3ех кубиков?(Что по моему может стать медленнее, чем уже 3 разных шаблонных файла).
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
а зачем три разных кубика?
1 открываете как таблицу с разделителем ;
2 берете строку
3 подставляте строку в текст типа <a href="{-Variable.A-}">{-Variable.B-}</a>

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

danni

Client
Регистрация
01.07.2012
Сообщения
373
Благодарностей
6
Баллы
18
а зачем три разных кубика?
1 открываете как таблицу с разделителем ;
2 берете строку
3 подставляте строку в текст типа <a href="{-Variable.A-}">{-Variable.B-}</a>

На шарпе то те же самые действия, только что выглядят компактнее а по скорости разница какие то болты. ну на таких объемах то уж точно.
Ну таблица это хорошо, но как я понял она в разы больше грузит ОЗУ, чем список, у меня 16гб и все под завязку.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
ну тогда да - добавится кубиков, чтобы не грузить оперативку можно конечно работать с байтовыми строками - но это довольно тухлая затея. Если не грузится оперативка, то грузится жесткий диск) а он в скорости однозначно проигрывает оперативке.
 

danni

Client
Регистрация
01.07.2012
Сообщения
373
Благодарностей
6
Баллы
18
А про объемы - ну спорный вопрос, если так подумать, то моя работа за день:
наделать страниц в 200 потоков через гет\пост и вот тут вопрос - сохранить в 1 список или в 3, мне кажется имеется определенная разница.
Но раз я уже взялся, то поздно отступать(если, я надеюсь, хуже не станет), вот код какой-то сделал, правда кодер из меня так себе, так что если кому не лень оптимизировать немного - буду рад.(я б регулярки влепил в код,

Код:
var list = project.Lists["Список 1"]; // Исходный список
  Random rand = new Random();
  StringBuilder strb = new StringBuilder();
  // j - количество строк, которое нужно взять.
  int j = int.Parse(project.Variables["j"].Value);
  for (int i = 0; i < j; i++)
  {
  int r = rand.Next(list.Count);
         string regex = project.Variables["myRegEx"].Value;
         string regex2 = project.Variables["myRegEx2"].Value;
         string text =  list[r];
         var reg = new System.Text.RegularExpressions.Regex(regex,  System.Text.RegularExpressions.RegexOptions.None);
         var url =  reg.Matches(text)[0];   
         var reg2 = new System.Text.RegularExpressions.Regex(regex2,  System.Text.RegularExpressions.RegexOptions.None);
         var ankor =  reg2.Matches(text)[0];   
         
         if (i + 1 == j)
  {
  strb.Append("<a href=\"" +url + "\">" + ankor + "</a>");
           
  }
  else
  {

  strb.Append("<a href=\"" +url + "\">" + ankor + "</a>\r\n"); // Разделитель
  }
  list.RemoveAt(r);
  }
  return strb.ToString();
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)