Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Duminica, "sportivii ♧&...

Metropola lui Pandele se orientea...

oprirea taximetristilor pe singur...

Curatat viniluri. Cand? Cum? Cu ce?
 Ajutor informații Bucure5...

Poor Things - 2023

Delphin Palace vs Sunis Elita

Apartament 3 camere, proprietari ...
 An constructie bloc din Bucuresti

Masina de spalat rufe Slim Beko W...

Sfat achizitie telefon dimensiuni...

Setare limba tastatura laptop.
 Lenovo Ideapad 3-15ALC6 LCFC HS46...

filtru de particule benzina GPF

Rascumparare titluri de stat TEZA...

Chirie la Administratia Fondului ...
 

[Provocare] I.P.-uri unice intr-un fisier 120GB

- - - - -
  • Please log in to reply
36 replies to this topic

#1
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,116
  • Înscris: 24.02.2007
https://forum.softpe...or-sau-runtime/

Vorbind de gestionarea memoriei, o provocare interesanta: https://codereview.s...very-large-file

Nici prea grea nici foarte usoara.

Edited by MarianG, 06 April 2021 - 20:39.
adaugat link


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,299
  • Înscris: 10.08.2005
Pentru JAVA sau "la liber" ?

#3
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,116
  • Înscris: 24.02.2007
Din partea mea, la liber. E si o discutie interesanta acolo pe baza faptului ca cel ce a postat solutia initiala a scris-o pentru un interviu.

#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,299
  • Înscris: 10.08.2005
Eu intreb o chestie, compresia nu este dependenta de numarul de IP-uri unice ?

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,116
  • Înscris: 24.02.2007
Compresia text nu distinge unde incepe un IP si unde se termina.

Edited by dani.user, 06 April 2021 - 21:15.


#6
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,299
  • Înscris: 10.08.2005
pai nu, dar inteleg ca sunt fiecare pe cate o line, iar parte din algorimul de compresie este "identificarea subsirurilor care se repeta", si locurile unde apar.

#7
_bcristian_

_bcristian_

    Senior Member

  • Grup: Senior Members
  • Posts: 3,532
  • Înscris: 31.12.2006
La ora asta nu stau sa-l fac mai bine, oricum, viteza e limitata de citirea de pe disc.
Evident ca in productie nici nu se pune problema sa parsezi asa ip-uri :D
using System;
using System.IO;
namespace ConsoleApp1
{
	class Program
	{
		static void Main(string[] args)
		{
			var start = DateTime.UtcNow;
			var numUnique = 0u;
			var addresses = new ulong[uint.MaxValue / 64];
			var fs = new FileStream(args[0], FileMode.Open, FileAccess.Read, FileShare.Read, 4096 << 16, FileOptions.SequentialScan);
			using (var sr = new StreamReader(fs))
			{
				for (var line = sr.ReadLine(); line != null; line = sr.ReadLine())
				{
					var ip = ParseIP(line);
					var index = ip / 64;
					var mask = 1ul << (int)(ip % 64);
					if ((addresses[index] & mask) == 0)
					{
						addresses[index] |= mask;
						numUnique++;
					}
				}
			}
			Console.WriteLine($"Using64Bits: {numUnique} {DateTime.UtcNow - start}");
		}
		static uint ParseIP(string line)
		{
			var result = 0u;
			foreach (var c in line)
			{
				if (c == '.')
				{
					result *= 256;
					continue;
				}
				result = result * 10 + (uint)(c - '0');
			}
			return result;
		}
	}
}



#8
Webbbob

Webbbob

    Member

  • Grup: Members
  • Posts: 636
  • Înscris: 22.03.2019
pentru cerința data eu nu m-as complica sa le parsez ci as face un hash(long) pe fiecare linie apoi cele unice stocate într-un SortedSet<T> sa fie look-upurile rapide(binary tree),câteva linii maxim in total.

#9
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
cu ce te ajuta sa faci un hash în loc sa le parsezi? sau sa le pui în sorted set fata de soluția de mai sus?

#10
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,233
  • Înscris: 15.11.2003
Eu le-as importa intr-o tabela temporara in memorie (dbs in-memory la alege cu import din fisiere text, cred ca toate au posibilitata) si as face SELECT DISTINCT sau COUNT ...whatever..
Sunt o gramada de patente si optimizari in sistemele de baze de date astfel incat putem folosi ce au gandit altii pana acum si suntem lenesi ca niste programatori adevarati Posted Image
Una dintre solutiile unde se poate face in 5 randuri : https://www.sap.com/...loud-trial.html

Edited by radu103, 07 April 2021 - 01:05.


#11
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
practic tragi cu tunul sa omori o musca

#12
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,233
  • Înscris: 15.11.2003

View Postromio79, on 07 aprilie 2021 - 01:14, said:

practic tragi cu tunul sa omori o musca
Practic mi-e lene sa reinventez roata, ma simt prea grabit (sau prost) ca sa-mi imaginez ca voi gasi solutia optima de a procesa 120GB de date text si acea solutie este un algoritm minune scris de mine intr-un orizont de timp necunoscut cu rezultate incerte.
In varianta propusa de mine, rezultatul este corect, suficient de rapid si muncesc putin.
Cred ca puncteaza onorabil la toate categoriile de jurizare Posted Image

Edited by radu103, 07 April 2021 - 01:23.


#13
rex

rex

    Senior Member

  • Grup: Senior Members
  • Posts: 4,619
  • Înscris: 16.06.2004
eu le-as incarca intr-o tabela intr-o baza de date relationala si apoi as rula
create table ip_unice as
select distinct .......
plus ca ptr incarcarea datelor din fisiere text sunt destul de multe utilitare optimizate ptr asa ceva si incarcarea poate fi facuta intr-un timp rezonabil.

am facut chestia asta cu excel-uri primite de la diversi care fie aveau spatii la sfarsitul coloanelor, fie aveau cate un punct sau virgula la sfarsit (date text), fie aveam duplicate sau erau formatate ca naiba si scrise ba cu litere mici ba cu litere mari.
odata ce le-am incarcat intr-o tabela am comenzi destule ptr procesarea datelor iar la sfarsit mi le exportam frumoase si curate ca un parlamentar proasppat iesit din inchisoare.
stiu ca se poate face si din excel, dar dura mai mult sa caut comenzile excel decat sa le procesez intr-o baza de date relationala.

aaa, daca e un test de angajare ca sa vada cat de bun esti ca programator asta e altceva, dar in viata de zi cu zi faci cum ti-e mai comod.

Edited by rex, 07 April 2021 - 01:25.


#14
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,233
  • Înscris: 15.11.2003

View Postdani.user, on 06 aprilie 2021 - 21:01, said:

Compresia text nu distinge unde incepe un IP si unde se termina.
Depinde ce compresie si cum in ce mod este aplicata.
Oricum acea compresie/decompresie va consuma mai mult procesor/curent/bani decat fara

View Postrex, on 07 aprilie 2021 - 01:24, said:

eu le-as incarca intr-o tabela intr-o baza de date relationala si apoi as rula
create table ip_unice as
select distinct .......

am facut chestia asta cu excel-uri primite de la diversi care fie aveau spatii la sfarsitul coloanelor, fie aveau cate un punct sau virgula la sfarsit (date text), fie aveam duplicate sau erau formatate ca naiba si scrise ba cu litere mici ba cu litere mari.
odata ce le-am incarcat intr-o tabela am comenzi destule ptr procesarea datelor iar la sfarsit mi le exportam frumoase si curate ca un parlamentar proasppat iesit din inchisoare.
stiu ca se poate face si din excel, dar dura mai mult sa caut comenzile excel decat sa le procesez intr-o baza de date relationala.
S-ar putea ca excelul tau sa fie "not responding" cand importi un fisier de peste cativa GB
Dar ideea este buna. As incerca-o daca as avea mai multa incredere in solutii Microsoft

View PostWebbbob, on 06 aprilie 2021 - 23:36, said:

pentru cerința data eu nu m-as complica sa le parsez ci as face un hash(long) pe fiecare linie apoi cele unice stocate într-un SortedSet<T> sa fie look-upurile rapide(binary tree),câteva linii maxim in total.
Probabil esti mare fan si bitcoin doar ptr ca iroseste o gramada de energie ca sa calculeze nimic

Edited by radu103, 07 April 2021 - 01:27.


#15
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,299
  • Înscris: 10.08.2005

View Postradu103, on 07 aprilie 2021 - 01:31, said:

Depinde ce compresie si cum in ce mod este aplicata.
Oricum acea compresie/decompresie va consuma mai mult procesor/curent/bani decat fara
In momentul de fata exista un fisier comprimat (20GB).

#16
radu103

radu103

    Guru Member

  • Grup: Senior Members
  • Posts: 12,233
  • Înscris: 15.11.2003

View PostMarianG, on 07 aprilie 2021 - 01:36, said:

In momentul de fata exista un fisier comprimat (20GB).
Pe care e bine sa il decomprimi cu cel mai bun soft specializat ptr asa ceva, evident ca doar 1 singura data !
Mai ieftin decat storage-ul pe disk e doar aerul/apa gratis in domeniul nostru daca vorbim de 120GB Posted Image

Edited by radu103, 07 April 2021 - 01:50.


#17
coniac

coniac

    Member

  • Grup: Members
  • Posts: 497
  • Înscris: 17.12.2019
Asta e problema de manual : cantitate necunoscuta de date de intrare , dar potential foarte mare, mai mare ca memoria disponibila
Este motivul pentru care s-au inventat generators/coroutines in Python
Care in Java se cheama streams

#18
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,116
  • Înscris: 24.02.2007
Nu mai stiu exact structura zip, dar ideal ar fi sa-l procesezi direct pe masura ce descarci arhiva.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate