使用django在SQL db中存储672个布尔值的最佳方法是什么?

时间:2015-11-05 16:00:33

标签: python django performance memory

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

1 个答案:

答案 0 :(得分:0)

我建议您按原样回答问题的方法是使用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上发布您的代码以供审核,并获得有关您的计划设计的一些反馈。

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

  • 为什么必须将值存储为一个变量?
  • 您是否在过程中过早优化了计划?
  • 程序是否已运行且确实太慢,或运行正常?程序需要多快?
  • 你能否以不同的方式设计程序以完全避免这个问题?