Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как хранить и иметь быстрый доступ к данным? (https://javascript.ru/forum/misc/84837-kak-khranit-i-imet-bystryjj-dostup-k-dannym.html)

webgraph 11.01.2023 15:57

Цитата:

Сообщение от voraa (Сообщение 549882)
Т.е если надо сравнить на больше-меньше - надо сначала перевести в bigint? Просто как строки не получится.

Примеры были отредактированы. Теперь все значения целочисленные. Да, строку необходимо привести к виду BigInt.

webgraph 11.01.2023 16:02

Цитата:

Сообщение от voraa (Сообщение 549882)
Т.е если надо сравнить на больше-меньше - надо сначала перевести в bigint? Просто как строки не получится.

А для чего сравнивать на большее-меньшее? Если достаточно сравнить === ? типа

//

if('100' === '100') return true;

// а если всё таки требуется математические сравнения больше-меньше, то тогда определенно надо привести к виду BigInt

voraa 11.01.2023 16:02

Цитата:

Сообщение от webgraph
по итогу при общем большом количестве операций думаю могут возникнуть трудности. и оптимальнее все таки искать value у конкретного участника:

Лучше, конечно иметь весь список операций, которые могут понадобиться. Какие частые и надо проводить быстро, какие редкие и скоростью можно пожертвовать.
Из того, что написано может быть такая схема

const operations_objects = [
	{
		from: 'e3d08a24-971f-4e5b-b646-a9decd12f05d', // UUID от кого
		to: 'd82bbb1d-0ab0-4d4d-8f97-41ddf6460c41',  // UUID кому
		value: '500.00000000000000',  // сколько (может быть уникальным значением) и принципиально строковое значение
		total_from: '100.00000000000000', // сколько осталось у отправителя
		total_to: '500.00000000000000', // сколько стало у получателя
		time: 1673357366 // дата проведения операции в секундах (от 01.01.1970)
    },
    {
		from: 'bd166b6d-381d-4109-9b4b-7a48a26b4119',
		to: 'ef59025a-165d-407e-831b-ab3464ae3861',
		value: '300.00000000000000',
		total_from: '700.00000000000000',
		total_to: '400.00000000000000',
		time: 1673357377
    },
];

memberOperations = new Map ()

Ключом является UUID участника
Значение - такой объект
{
operations: [<n.op>, <n.op>, <n.op...] // номера операций м массиве operations_objects с этим участником
values: new Map();
}

ключ у values - values из операции
значение - [<n.op>, <n.op>...] - номера операций м массиве operations_objects с этим участником и с этим values

webgraph 11.01.2023 16:24

Цитата:

Сообщение от voraa (Сообщение 549885)
Лучше, конечно иметь весь список операций, которые могут понадобиться. Какие частые и надо проводить быстро, какие редкие и скоростью можно пожертвовать.
Из того, что написано может быть такая схема

const operations_objects = [
	{
		from: 'e3d08a24-971f-4e5b-b646-a9decd12f05d', // UUID от кого
		to: 'd82bbb1d-0ab0-4d4d-8f97-41ddf6460c41',  // UUID кому
		value: '500.00000000000000',  // сколько (может быть уникальным значением) и принципиально строковое значение
		total_from: '100.00000000000000', // сколько осталось у отправителя
		total_to: '500.00000000000000', // сколько стало у получателя
		time: 1673357366 // дата проведения операции в секундах (от 01.01.1970)
    },
    {
		from: 'bd166b6d-381d-4109-9b4b-7a48a26b4119',
		to: 'ef59025a-165d-407e-831b-ab3464ae3861',
		value: '300.00000000000000',
		total_from: '700.00000000000000',
		total_to: '400.00000000000000',
		time: 1673357377
    },
];

memberOperations = new Map ()

Ключом является UUID участника
Значение - такой объект
{
operations: [<n.op>, <n.op>, <n.op...] // номера операций м массиве operations_objects с этим участником
values: new Map();
}

ключ у values - values из операции
значение - [<n.op>, <n.op>...] - номера операций м массиве operations_objects с этим участником и с этим values

Получается параметр operations позволит выводить весь список операций или определенное количество по конкретному UUID, а параметр values — искать значение value у этого участника.

Операции добавлять с помощью unshift().

Массивы в данном случае действительно быстро будут работать? А то мы выяснили, что они ппц какие медленные.

voraa 11.01.2023 16:33

Цитата:

Сообщение от webgraph
Операции добавлять с помощью unshift().

Почему? обычный .push()

Цитата:

Сообщение от webgraph
Массивы в данном случае действительно быстро будут работать?

Вот для этого и нужен весь список операция, что бы понять, какие операции требуют перебора по массивам.
Из того. что вы написали в первом посте, я операций поиска не вижу. Только взять n последних для
Цитата:

Сообщение от webgraph
3. Вывести список всех операций (или их часть) по конкретному участнику


webgraph 11.01.2023 16:38

Цитата:

Сообщение от voraa (Сообщение 549887)
Почему? обычный .push()


Вот для этого и нужен весь список операция, что бы понять, какие операции требуют перебора по массивам.
Из того. что вы написали в первом посте, я операций поиска не вижу. Только взять n последних для

Зачем .push()? Новые операции добавлять в начало массива. А потом через цикл for вывести , например, 100 первых операций из массива — что будет являться 100 последними операциями участника.

webgraph 11.01.2023 16:40

Цитата:

Сообщение от voraa
Вот для этого и нужен весь список операция, что бы понять, какие операции требуют перебора по массивам.

мм что-то не до конца понятно что вы имеете ввиду?))

voraa 11.01.2023 16:43

Вопрос, что чаще делается.
Если добавляем гораздо чаще, чем получаем последние n, то лучше push.
А получить время от времени последние можно через slice(-n)

webgraph 11.01.2023 16:45

Цитата:

Сообщение от voraa (Сообщение 549890)
Вопрос, что чаще делается.
Если добавляем гораздо чаще, чем получаем последние n, то лучше push.
А получить время от времени последние можно через slice(-n)

А, типа при unshift() — происходит смещение индексов. А при push() - просто добавление.

"получить время от времени" — это о чем вообще?)))

webgraph 11.01.2023 16:46

Цитата:

Сообщение от voraa
то лучше push

Чувствуется, что здесь актуальнее использовать List ?)))


Часовой пояс GMT +3, время: 20:29.