【问题标题】:What is the best method to store 672 boolean values in the SQL db with django?使用 django 在 SQL 数据库中存储 672 个布尔值的最佳方法是什么?
【发布时间】:2015-11-05 16:00:32
【问题描述】:

我想使用 django 在 sql 数据库中存储一个包含 672 个布尔值的变量。 我使用 models.TextField 来存储这个变量。我想使用尽可能少的内存来减少处理时间,所以这是最好的方法还是有另一种方法来存储这样的变量? 谢谢

【问题讨论】:

  • 检查将布尔值存储在 BitArray 中。
  • 在这里尝试微优化是无稽之谈。你有没有分析过你的用例?数据库真的是瓶颈吗?
  • 布尔代表什么
  • @Monkpit 我想使用 django 字段
  • @deets 我想优化数据库,因为我会有很多这样的变量

标签: python django performance memory


【解决方案1】:

我建议按原样回答您的问题的方法是使用BitArray

>>> from random import getrandbits
>>> def get_n_bools(n):
...    count = 0
...    while count < n:
...        yield getrandbits(1)
...        count += 1
>>> from bitarray import bitarray
>>> ba = bitarray()
>>> ba.extend(get_n_bools(672))
>>> ba.tobytes()
'\xdd#\xa4_N\xcb\x94\\\\Q\xf02\x13Ov\xf4\xee=Jw\xef\xcf\x9co\xac"\xa8\xab\x1bam\xc6W[\x94\x125B\x1e\x9a\x85|\xe7\x0eQ\xe2\x010\xf4\xad\xa4\r\xc1\xef6e\x0b\x9a\xbb\xb7\xa9\x83\xc3\xfa\xb1\xffUbu\xfe\x10\x8d\x16\xdcS\x808\x99\xc1CQ&N\xd0'
>>> getsizeof(ba.tobytes())
105

使用tobytes() 并将值存储在Django BinaryField 中。

旁白:

您应该重新考虑是否有必要以这种方式存储值 - 也许您可以将代码发布到 codereview.stackexchange.com 以供审核,并获得有关您程序设计的一些反馈。

另外,请考虑评论者提出的问题:

  • 为什么必须将值存储为一个变量?
  • 您是否在流程中过早地优化程序?
  • 程序是否运行过,确实太慢了,还是运行良好?程序需要多快?
  • 您能否以不同的方式设计程序来完全避免该问题?

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2020-04-08
    • 2021-04-21
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2021-09-27
    • 2015-04-07
    相关资源
    最近更新 更多