Wpis z mikrobloga

Mam dostęp do pewnego dużego katalogu danych. Katalog ten zawiera setki tysięcy rekordów, a każdy z nich dużo różnych pól, jednak wśród nich próżno szukać id lub innego pola z unikatowymi danymi, które mogłoby za id posłużyć.

Owy katalog jest na bieżąco aktualizowany, więc jeżeli chciałbym zsynchronizować się z katalogiem, to jest problem... bo nie bardzo wiem, który rekord porównać z którym rekordem w mojej bazie.

Liczenie sumy kontrolnej jest bez sensu, gdyż aktualizacja jednego pola modyfikowałaby ową sumę i zamiast zaktualizować stary rekord, stworzyłbym nowy, bardzo podobny.

Jak wyjść z takiej sytuacji?

#programowanie #bazydanych
  • 24
@msq: powiedzmy, że po mojej stronie jest mysql (aczkolwiek to się może w przyszłości zmienić), katalog z którego czytam zwraca dane w formacie, który nawet nie ma oficjalnej specyfikacji i pamięta lata 80, natomiast dorobiłem sobie przelotke, która konwertuje mi to na XMLa.
@noisy: Czyli za kazdym razem, w regularnych odstepach czasu dostajesz stamtad XMLa, w ktorym moga byc nowe rekordy, zmienione rekordy, tak? Czy rekordy moga tez byc usuwane? Stuktura tableli / XMLA sie zmieniaa czy nie?
@Wiceps: tak, jest. Jednak katalog jest codziennie aktualizowany, więc następnego dnia dane są nieaktualne. Nie mogę codzień budować bazy od nowa, bowiem po swojej stronie chce zbudować relacje między stosownymi rekordami a rekordami z innych tabel.
@noisy: Tak na dobra sprawe - to pomijajac juz Twoj problem - jak ten kataolg rozroznia rekord zmieniony od nowo dodanego, skoro nie ma zandego ID? I jak Ty chcesz to rozrozniac? Nie da sie. Jesli masz powiedzmy trzy kolumny i trzy z nich zmienia wartosc to jest nowy rekord czy dodany? :)
@noisy: Musisz miedc jakas kolumne ktore bedzie uniklanym indentyfikatorem rekordu. Inaczej nie zostaje Ci nic innego jak codziennie przeladowytac komplet danych po stronie mysql.

Pracuje z plikacjami ktore pobieraja dane z kilku zrodel i po przetworzeniu zapisuja je do bazy - jako nowy rekord lub jako aktualizacje. Ale w specyfikacji cala logika biznesowa jest dokladnie opisana - co, jak, na jakiej podstawie etc.
jak ten kataolg rozroznia rekord zmieniony od nowo dodanego, skoro nie ma zandego ID?


@msq: nie mam pojęcia jak to u nich działa. Może faktycznie po swojej stronie oni mają ID, jednak faktem jest to, że go nie podają na zewnątrz.
@msq: samo pobieranie danych trwa około 3-4 dni :D

Zacząłem się zastanawiać, czy nie zrobić czegoś takiego, że dziele dane z otrzymanego rekordu an 3-4 grupy. Dla każdej z tej grup liczę sumę kontrolną. Każdą sumę bym sobie zapisał. Owe sumy były by używane tylko do aktualizacji. Każdy rekord o niepowtarzalnych sumach dostałby przydzielone id przez bazę.

Przy aktualizacji sprawdzałbym, czy istnieje jakiś inny rekord, który posiada co najmniej dwie takie
A po czym ty wybierasz te dane?


@anonim1133: wyszukiwanie jest tekstowe. Czyli na dane słowo otrzymuję listę wpisów, które gdzieś te słowo posiadają. Osobnym problemem jest w ogóle odpytanie tego katalogu, by dostać wszystkie wpisy....
@noisy: Na Twoim miejscu przyjalbym po prostu ze te dwie, trzy kolumny ktorych zmiana jest najmniej prawdopodobna beda robic za klucz. I na tej podstawie albo robil update, albo delete, albo insert. Inaczej sie #!$%@? z implementacja a aplikacja bedzie puszczac banke nosem.