Проследявайте изгледите на изображения по рентабилен начин

Търся решение за внедряване на спонсорирани изображения в едно от моите GAE приложения.

Имаме около 5000 потребители, които използват приложението и тези спонсорирани изображения трябва да се проследяват всеки път, когато се гледат и всеки път, когато някой кликне върху тях.

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

В момента създаваме нов запис в хранилището за данни за всеки изглед и всяко щракване и разполагаме с планировчик, който го предава на опашка, която събира всички изгледи и щраквания, запазвайки броя в статистически обект - не е много ефективно.


person Jan Vladimir Mostert    schedule 27.05.2013    source източник
comment
Защо не използвате разпределения брояч, който ви беше предложен? Можете да го разпределите на брояч с 20 реда, което означава, че ще трябва да достигнете 20 посещения в секунда (много), за да го направите силно ненадежден   -  person MeLight    schedule 11.03.2014
comment
Да кажем, че сме доста под 20 удара/секунда в името на аргумента. Ако работи само един екземпляр, трябва да работи, но веднага щом се стартират два екземпляра, имате 1/20 шанс два екземпляра да се опитат да пишат в един и същ запис (като по този начин пропускате тази песен, тъй като и двете увеличават едно и също влизане едновременно.) и още повече с повече случаи. Има ли някакво заключване на ниво ред, което мога да използвам, за да получа пропуск, като трябва да жертвам точността? distrubuted-counter + entity-locking би било идеалното решение.   -  person Jan Vladimir Mostert    schedule 11.03.2014
comment
Не съм експерт по вероятностите, но вярвам, че две инстанции, които се опитват да попаднат на една и съща редица от 20 броячи, ще дадат общ шанс от 1/400. Що се отнася до въпроса ви за заключване, не знам за такъв механизъм (все пак би било много хубаво).   -  person MeLight    schedule 11.03.2014
comment
Току-що се сетих - можете да използвате опашка с пропускателна способност (не помня точния термин) на една задача наведнъж. По този начин знаете, че всеки път ще имате една операция   -  person MeLight    schedule 11.03.2014
comment
Това е доста страхотна идея, оставете всеки изглед да бъде хвърлен на опашка, ограничете броя на задачите, които се обработват в секунда до скорост, която е по-малка от скоростта на запис, и свържете всяка опашка с един от разпределените броячи, по този начин ще получите точни преброявания. Щастлив съм да приема това като отговор.   -  person Jan Vladimir Mostert    schedule 12.03.2014


Отговори (1)


Публикуване на това като отговор :)

Можете да използвате опашка с пропускателна способност от една задача на път и да изпратите операциите за преброяване на тази опашка. По този начин ще знаете, че всеки път на брояча се извършва само една операция за преброяване.

person MeLight    schedule 12.03.2014