2017-01-31 8 views
3

У меня есть приложение, использующее DynamoDB, и мне нужно иметь возможность хранить некоторые числа. На данный момент эти числа будут только когда-либо положительными целыми числами или иногда положительными числами с 1 десятичной точкой.Amazon DynamoDB: Сохранение целых чисел как чисел против строк

Поскольку DynamoDB имеет только один тип данных Number, который, как я полагаю, несколько эквивалентен поплавку, безопасно хранить целые числа как Числа, не беспокоясь о точности, вызывающей неправильное возвращаемое значение (например, 1.999999999999 вместо 2) ? Или я должен сохранять их в виде строк и анализировать целые числа из строк, когда они мне нужны. Я знаю, что DynamoDB уже хранит Numbers как строки в какой-то момент в фоновом режиме, но я не уверен, есть ли вероятность потери точности до этого преобразования.

Как я уже сказал, я буду использовать только положительные числа с точностью до 1 десятичного разряда.

ответ

6

Атрибут типа Number. Например:

«N»: «123,45»

Числа посылаются по сети DynamoDB как строки, чтобы совместимости разворачивания разных языков и библиотек. Однако DynamoDB рассматривает их как атрибуты типа номера для математических операций .

Тип: String Обязательный: Нет

Из документации, если вы сохраните номер как 1.999999 вы получите его как 1.999999.

Также дополнительную документацию:

Количество

Номер может содержать до 38 цифр точности, и может быть положительным, отрицательным , или ноль.

Положительный диапазон: 1E-130 до 9.9999999999999999999999999999999999999E + 125 Отрицательного диапазон: -9.9999999999999999999999999999999999999E + 125 до -1e-130 DynamoDB использует строку JSON для представления Количества данных в запросах и ответах. Для получения дополнительной информации см. API DynamoDB Low-Level .

Если точность чисел важна, вы должны передать номера в DynamoDB , используя строки, которые вы конвертируете из числа.

+0

Эта жирная строка во второй цитате из документов является тем, что вдохновило этот вопрос, но, читая его снова, я понимаю, что я путаю точность и точность. Я взял строку, чтобы обозначить, что цифры не могут быть сохранены точно, когда на самом деле это означает, что если я хочу сохранить число, превышающее предел точности их системы, тогда его лучше сохранить в виде строки. Спасибо! –

+0

@GeoffMcLennan Exaclty, как я тоже это понимаю из документации. Так как тип чисел - это строки, а преобразование числа происходит только внутри себя, не должно быть никаких проблем. Однако всегда проверяйте все, чтобы убедиться, что он работает в соответствии с вашими настройками после завершения настройки. –

3

Еще одно преимущество хранения чисел DynamoDB Number data type.

В UpdateExpression, вы можете использовать + or -, чтобы добавить/вычесть значения.

Пример: -

Добавить: -

UpdateExpression : "SET total_val = total_val + :value",    
    ExpressionAttributeValues: {     
      ':value': 2 
    }, 

Вычесть: -

UpdateExpression : "SET total_val = total_val - :value",    
     ExpressionAttributeValues: {     
       ':value': 2 
     }, 

выше не представляется возможным, если вы храните число как данные Струнный типа в DynamoDB.

+0

Это хороший момент, но, к сожалению, это не относится к моей конкретной ситуации, поскольку я всегда буду устанавливать значение вручную, а не увеличивать его. Действительный ответ. –