• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

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

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

    Запись на курс до 25 апреля. Получить промодоступ ...

View для отлова дублирующихся данных

  • Автор темы engao
  • Дата начала
E

engao

Доброго времени суток.

Как можно построить в Лотусе view для отображения документов с дублирующимися данными (например: в 2-х разных документах в поле Email одинаковые значения)?

Спасибо!
 
N

nvyush

engao
Первый столбец — категоризованный с формулой типа Email + " (" + @DocDescendants + ")", второй — полем номера документа или другим, идентифицирующим документ.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
engao
не согласен что для этого необходимо создавать вид, лишь увеличиваете нагрузку на сервер
 
A

Akupaka

Как можно построить в Лотусе view для отображения документов с дублирующимися данными (например: в 2-х разных документах в поле Email одинаковые значения)?
если целью есть проверка на дублирование при создании документа, то делаешь вид с сортировкой по ключу и производишь при сохранении документа поиск по виду NotesView.GetDocumentByKey(), если идет пересохранение документа, то пригодится еще и проверка унидов сохраняемого и найденного документов.

"А Баба Яга против!" )) ты предложение тогда свое опубликуй, а не только смуту наводишь :)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Akupaka
Баба Йога говорит, что существует КУЧА способов проверить дублирующие данные, но для начала стоило бы более детально описать задачу :)
 
E

engao

Задача такая.

Ксть база и в ней 500 тыщ документов. При создании этих 500 тыщ документов никто с проверкой данных не заморачивался.
Теперь стоит задача - навести порядок. Например убрать дублирующиеся записи по полю Email. Но автоматом удалять нельзя, все это должно быть сделано вручную. Вот нужна такая View для пользователей.
 
N

nvyush

Задача такая.

Ксть база и в ней 500 тыщ документов. При создании этих 500 тыщ документов никто с проверкой данных не заморачивался.
Теперь стоит задача - навести порядок. Например убрать дублирующиеся записи по полю Email. Но автоматом удалять нельзя, все это должно быть сделано вручную. Вот нужна такая View для пользователей.
Кмк, лучше сделать приватную папку и складывать туда повторяющиеся записи агентом, ищущем повторы. Так можно выбрать только дублирующиеся записи. То, что я предлагал выше, выведет все документы, и выискивать среди них повторы пользователю будет затруднительно.
 
A

Akupaka

думаю, в этом случае будет наиболее удобным вид описанный nvy
вид с категорией по ключу поиска. только кол-во документов в категории я бы сделал через тоталз.
после отлаживания, если видом не будут пользоваться, его можно убить, либо только индекс, а индексацию сделать ручной, чтобы сервер не заморачивался. имхо.
зы: а предварительно, реализовать механизм проверки добавления дублирующих записей, чтобы очистка была одноразовой ;)

А что скажет Баба Йога? ))

зы2: а с папкой даже интереснее.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Akupaka
скажу, что правильнее всего было бы для начала запустить агент, который пометит дубликаты и вышлет их или почтой, или через ексель с гиперсылкой или уже в отдельную папку/вид, но уж никак не создавать вид, который будет играться с 500К доков ;)
 
A

Akupaka

но уж никак не создавать вид, который будет играться с 500К доков
что такое 500 тыщ доков? тьфу! тем более, если отображать два-три небольших поля

Добавлено:
что правильнее всего было бы для начала запустить агент, который пометит дубликаты
а он их должен как перебрать? может dbseach выполнять?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Akupaka
а он их должен как перебрать? может dbseach выполнять?
берем все доки, загоняем в свой класс, перебираем в памяти, получаем необходимое, оформляем красиво результат
если всё делать на стороне сервера то 500К переберутся менее чем за минуту
 
E

engao

Akupaka

берем все доки, загоняем в свой класс, перебираем в памяти, получаем необходимое, оформляем красиво результат
если всё делать на стороне сервера то 500К переберутся менее чем за минуту

В итоге получаем что-то вроде очета, но никак не view?
 
K

Klido

берем все доки, загоняем в свой класс, перебираем в памяти, получаем необходимое, оформляем красиво результат
в рамках задачи - как-то много :) если нет готового "своего" класса, реализованного перебора, красоты оформления - насколько трудоемкость превысит вьюху по 1-му полю (которое ищут)?

а сколько потенциально е-мэлов разных в этих 500К доков?
 
E

engao

в рамках задачи - как-то много :) если нет готового "своего" класса, реализованного перебора, красоты оформления - насколько трудоемкость превысит вьюху по 1-му полю (которое ищут)?

а сколько потенциально е-мэлов разных в этих 500К доков?

E-mail - частный случай. Я думаю, будет около 5% всех документов. Как вариант думаю использовать NotesSQL и слить данные в Ms Access и там обработать, но задача в том, что это нужно ежедневно.
 
K

Klido

это нужно ежедневно
выше уже написали - сразу при получении задачи надо внедрить контроль при создании, а затем уже разгрести остальное...
и все-таки - нужна нормализация по нескольким ключам или...? Если по 3-5 ключам - руками быстрее через вьюхи, если сложнее - да, слить в реляционку, например, DECSом... Что там с ними делать - другой вопрос...
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
надеюсь, ты шутишь
А что такого? Завести список(list) байтов(byte) для каждого поля. Ключ ограничить, например, 200 символами. Достаточно быстро всё проверим. Памяти должно хватить.

Добавлено: Класс, по-моему, здесь лишний. И так достаточно просто. :)

Добавлено: Проверил на 70 тыс. Две минуты и сорок секунд на перебор с проверкой унида. Заодно дергал значение поля.
Памяти по расчетам список кушает 70000*32*2+70000=4.3Мб. В реальности больше выйдет.
Самое долгое выйдет - это представление информации. Например, в папку кидать.
 
A

Akupaka

Medevic
код не жалко показать? че-то я не понял, что именно ты делал для проверок.
или алгоритьм подробный
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Код:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim dc As NotesDocumentCollection
Dim l List As Byte
Dim tag As String
Dim i As Long
Dim k As Long

Set db = session.CurrentDatabase

Set dc = db.Search({@All}, Nothing, 0)
i = dc.Count
k = 0
Set doc = dc.GetFirstDocument()
While Not (doc Is Nothing)
tag = doc.GetItemValue("Author")(0)
tag = doc.UniversalID
If Not Iselement(l(tag)) Then
l(tag) = 1
Else
'повтор
k = k + 1
End If
i = i - 1
Print Cstr(i) + " " + Cstr(k)
Set doc = dc.GetNextDocument(doc)
Wend
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
3
Доброго времени суток.
Как можно построить в Лотусе view для отображения документов с дублирующимися данными (например: в 2-х разных документах в поле Email одинаковые значения)?
Спасибо!

Первый столбец категоризируем, во втором - Total

Код:
Sub Initialize()
Dim s As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim nv As NotesViewNavigator
Dim en As NotesViewEntry
Dim cl As NotesDocumentCollection
Dim doc As NotesDocument
Set db=s.Currentdatabase
Set v=db.Getview("$MessageID")
v.Autoupdate=false
Set nv=v.Createviewnav()
Set en=nv.Getfirst()
Do While Not en Is Nothing
If en.Columnvalues(3)>1 then
'Print en.Columnvalues(0) & "--" &en.Columnvalues(3)
Set cl=v.Getalldocumentsbykey(en.Columnvalues(0),true)
Set doc=cl.Getfirstdocument()
Call cl.Deletedocument(doc) 
'Call cl.Putallinfolder("Dubl") ' если надо - то в папку
Call cl.Removeall(true) ' я решил грохать сразу
End If
Set en=nv.Getnextcategory(en)
Loop
End Sub
На 200 тыщ категорий работало секунд 20...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!