我需要存储相同值的不同类型。Value 可以表示 DATE、INT、BOOLEAN、DOUBLE 和任何其他类型。我想知道是否可以不使用多个表 - 每个表用于不同的类型(我认为这会使存储值的使用变得非常复杂(主要是搜索、过滤))。当连续存储多个以NULL值为主的列表时,是否会造成很大的存储和性能下降?
我正在考虑具有此类示例列的表,其中仅填充一个值列:
id valueVarchar valueDate valueBoolean valueInt valueDouble
Run Code Online (Sandbox Code Playgroud)
如果这种方法明显错误,请赐教。
我正在使用 MySQL (InnoDB)(数据库不是一个大问题,如果需要可以更改)和 JPA 创建 JSF 应用程序。
编辑:
现在我有一张表,其中有一个文本值字段。我正在服务器端将值与数据库进行转换。因为该项目最近才开始,现在改变模型会比将来更轻松,所以我正在考虑是否存在更好的方法。
众所周知,simple x++不是原子操作,实际上是read-increment-write操作.这就是它应该同步的原因.但那怎么样get()?我已经读过它应该同步,但有人可以解释我为什么?通过引入happens-before关系来避免内存一致性错误?当get()多个线程经常调用并且很少更改值时,情况如何呢?是不是synchronized get()放慢了速度?在该场景中是否有其他方法可以实现同步(不使用AtomicInteger)?就volatile在这里工作的关键字?
public class Counter {
private int value;
public synchronized int get() { return value; }
public synchronized int increment() { return ++value; }
public synchronized int decrement() { return --value; }
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:
我想说清楚.通过使用volatile我的意思是引入该关键字和去除synchronized在get()方法.我想知道它是否会使它成为线程安全的,但如果许多线程正在读取值并且很少更改它,那么它也会更有效.