Potrzebuję napisać backend aplikacji (klient będzie mobilny i webowy), który będzie wykonywał częste złożone obliczenia liczenia dystansu. Zastanawiam się nad wyborem języka. To powinno być coś co poradzi sobie z obsługą API i jednocześnie z obliczeniami (wydajnie).
Mam doświadczenie w NodeJS, Javie, C# oraz mniejsze (znacznie) w C++, Scala i OCaml. Natomiast przeglądając fora i analizując dostępne rozwiązania zastanawiam się nad Go i Scala.
@kary_koniu: Użyłbym tego, co @lerner, tyle, że bez C++, gdyż Twoje obliczenia wcale nie będą tak złożone, jak Ci się wydaje, i spokojnie w Javie to obskoczysz.
@Ginden: Wszystko zależy od ilości użytkowników. Mając N użytkowników potrzebuję ustalić odległość pomiędzy x, a n, gdzie n należy do N. Załóżmy na potrzeby testów, że jest to liczba z zakresu <1000; 10 000> na sekundę (w zależności od aktualnego obciążenia)
@kary_koniu: Wygenerowanie 4 liczb pseudolosowych, wykonanie Twojego równania i wstawienie wyniku do tablicy może zostać wykonane u mnie na komputerze na jednym wątku w JavaScripcie 200 000 razy na sekundę.
Powinienem więc zadać pytanie nie - "tysięcy", tylko "ile setek tysięcy".
Mając N użytkowników potrzebuję ustalić odległość pomiędzy x, a n, gdzie n należy do N. Załóżmy na potrzeby testów, że jest to liczba z zakresu <1000; 10 000> na sekundę (w zależności od aktualnego obciążenia)
@kary_koniu: Ale pisz po ludzku. Nie można ustalać odległości między punktem, a zbiorem. :P Masz N punktów i chcesz policzyć odległość każdego z nich od jakiegoś centralnego punktu, tak?
Wygenerowanie 4 liczb pseudolosowych, wykonanie Twojego równania i wstawienie wyniku do tablicy może zostać wykonane u mnie na komputerze na jednym wątku w JavaScripcie 200 000 razy na sekundę.
@kary_koniu: Przeglądarki, F12, console.time('a'); for(var i=0;i<200000;i++){ kod pętli} console.timeEnd('a') Jak liczysz wobec centralnego punktu to nie ma potrzeby się martwić - cache na wartości funkcji trygonometrycznych dla danego punktu, potem całość upraszcza się do trzech funkcji trygonometrycznych na użytkownika. Jak nie wymagasz dużej dokładności to O(1) można uzyskać przez wygenerowanie tablicy lookup, ale to pewnie wymaga mierzenia z cache.
@kary_koniu: ja najpierw wybieram innych co są nie dalej niż bodaj 0.3 współrzędnych usera potem dopiero liczę odległość do tych co zostają. Nie ma sensu wybierac z bazy i liczyć dla tych których i tak nie pokaże bo są za daleko.
Mam doświadczenie w NodeJS, Javie, C# oraz mniejsze (znacznie) w C++, Scala i OCaml.
Natomiast przeglądając fora i analizując dostępne rozwiązania zastanawiam się nad Go i Scala.
Co myślicie mirki? Może jakieś inne propozycje?
#programowanie #webdev #scala #golang #pytanie
Jaki język wybrać?
Tak bym to zrobił.
No może nie będą złożone jakoś bardzo, wyrażenia typu:
czyli pierwiastki i f. trygonometryczne. Problem w tym, że wywołań takiego wyrażenia będzie bardzo dużo, non stop.
Powinienem więc zadać pytanie nie - "tysięcy", tylko "ile setek tysięcy".
@kary_koniu: Ale pisz po ludzku. Nie można ustalać odległości między punktem, a zbiorem. :P
Masz N punktów i chcesz policzyć odległość każdego z nich od jakiegoś centralnego punktu, tak?
Czego użyłeś do przetestowania tego?
console.time('a'); for(var i=0;i<200000;i++){ kod pętli} console.timeEnd('a')Jak liczysz wobec centralnego punktu to nie ma potrzeby się martwić - cache na wartości funkcji trygonometrycznych dla danego punktu, potem całość upraszcza się do trzech funkcji trygonometrycznych na użytkownika.
Jak nie wymagasz dużej dokładności to O(1) można uzyskać przez wygenerowanie tablicy lookup, ale to pewnie wymaga mierzenia z cache.