美文网首页OrientDB
OrientDB 使用过程中遇到的一个“BUG”

OrientDB 使用过程中遇到的一个“BUG”

作者: jiaxiaolei | 来源:发表于2017-10-27 12:21 被阅读72次

    最近项目中用到了图数据库,最终选择的是OrientDB.

    OrientDB本身提供了一个WEB 的操作界面,总体来说,挺好用的...

    但是昨天遇到一个问题,折腾了好久。不过,最后问题还是找到了。

    先看一个录屏吧,看能不能发现问题所在....

    OrientDB录屏

    yk: 1847092548766533637L

    在UserList中添加一条记录,字段 id (long) 插入 1847092548766533639, 

    点击SAVE(保存),发现立即变成了 1847092548766533600

    通过查询语句可以查到结果:

    select * from `UserList` where id = 1847092548766533600

    通过 1847092548766533639 进行检索,查不到结果:

    select * from `UserList` where id = 1847092548766533639

    通过 1847092548766533600 进行删除,可以成功删除:

    delete from `UserList` where id = 1847092548766533600

    后来,反复确认和排查,发现是JavaScript 数据精度的问题。

    对于大于 2的53次方(9007199254740991)的整数(long), 数据会溢出,丢失精度。

    >>> 2**53-1

    9007199254740991

    >>> len('9007199254740991')

    16

    对此的解决方案有:

    1. 降低字段id的精度,字段id的最大精度为长度为15的整数;

    2.WEB后端(Python后端)和WEB前端数据交互的时候,使用字符串(string)来传递。在后端,涉及数据库操作的时候,再造型为整数。

    扩展阅读

    [JavaScript数字精度丢失问题总结](http://www.cnblogs.com/snandy/p/4943138.html)

    http://www.cnblogs.com/snandy/p/4943138.html

    简介:

    对于整数,前端出现问题的几率可能比较低,毕竟很少有业务需要需要用到超大整数,只要运算结果不超过 Math.pow(2, 53) 就不会丢失精度。

    对于小数,前端出现问题的几率还是很多的,尤其在一些电商网站涉及到金额等数据。解决方式:把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)

    javascript 精度问题导致后端传过来的值显示不正确,有何好的解决办法?

    https://www.zhihu.com/question/34564427?sort=created

    http://www.iteye.com/news/28410

    [4 个用于执行高级数学计算的 JavaScript 库](http://www.iteye.com/news/28410)

    简介:

    在使用JavaScript执行数学方面的任务时,往往要用到浮点运算,且需要精确到某位小数,这就容易造成错误,而且会相当费时。因此,如果你需要做一些高精度的数学计算的编程工作,比如财务或科学计算,那么你一定需考虑使用下面的这些库。

    numbers.js

    Numeric Javascript

    Tangle

    accounting.js

    用 javascript 做科学计算的最佳的方案是什么?

    https://www.zhihu.com/question/40585948?sort=created

    简介:

    题主提到了Python,就默认题主会Python好了。我建议用ipython notebook。安装Anaconda就可以用它了。它可以让你在浏览器上运行和展示Python。

    js不适合做科学计算,科学计算应该放在后台,用java,c++等语言实现,然后将计算后的结果通过js传递到前台的web界面。js是弱类型语言,用浏览器做计算那不太操蛋了吗

    相关文章

      网友评论

        本文标题:OrientDB 使用过程中遇到的一个“BUG”

        本文链接:https://www.haomeiwen.com/subject/skerpxtx.html